Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示小于特定日期但在剩余数据组中为最大值的最大日期_Sql_Oracle - Fatal编程技术网

Sql 显示小于特定日期但在剩余数据组中为最大值的最大日期

Sql 显示小于特定日期但在剩余数据组中为最大值的最大日期,sql,oracle,Sql,Oracle,我在表中设置了一组ID和时间为的行,我正在尝试获取时间小于所提到的特定时间的行,同时选择的行应该是其余行中的最大行 我已经创建了一个临时表,并在其中添加了Id和相应的日期,现在我试图将表中的日期与特定日期进行比较,同时在select中选择Id和Max date,但不幸的是,我得到了多行,相反,我正在查找在提到的特定时间之后具有Max time的行 create table temp_test (id varchar2(20),tmstmp date); 随机插入下面带有数据的查询 insert

我在表中设置了一组ID和时间为的行,我正在尝试获取时间小于所提到的特定时间的行,同时选择的行应该是其余行中的最大行

我已经创建了一个临时表,并在其中添加了Id和相应的日期,现在我试图将表中的日期与特定日期进行比较,同时在select中选择Id和Max date,但不幸的是,我得到了多行,相反,我正在查找在提到的特定时间之后具有Max time的行

create table temp_test (id varchar2(20),tmstmp date);
随机插入下面带有数据的查询

insert into temp_test values (10, sysdate);
select查询的输出为

ID      TMSTMP
--  -------------------
15  2019-02-15 20:29:31
10  2019-02-15 20:25:51
11  2019-02-15 20:26:00
12  2019-02-15 20:26:08
13  2019-02-15 20:26:16
10  2019-02-15 20:26:22
现在我尝试执行下面的查询

select id, max(TMSTMP) from temp_test
where TMSTMP <  TO_DATE('2019-02-15 20:28:00', 'YYYY-MM-DD HH24:MI:SS')
group by id;
但我希望获得如下输出,因为这是指定时间后的最大时间

ID      TMSTMP
--  -------------------
10  2019-02-15 20:26:22
我们非常感谢任何其他解决方案,谢谢

对约翰的答案进行小编辑

如果我有另一列显示名称,并且我想对其应用过滤器,那么可以做什么

select *
from temp_test
where name ='TOM' and tmstmp = (select max(tmstmp) 
            from temp_test 
            where name ='TOM' and tmstmp < TO_DATE('2019-02-15 20:28:00', 
'YYYY-MM-DD HH24:MI:SS'))

此处是否可以删除重复比较?

我假设您希望整行的最大时间戳在最大日期之前:

with CTE as
(
select id, tmstmp, row_number() over (order by tmstmp desc) as rn
from temp_test
where tmstmp < TO_DATE('2019-02-15 20:28:00', 'YYYY-MM-DD HH24:MI:SS')
)
select *
from CTE
where rn = 1


如果您按id分组,maxtmstmp将是每个给定id分组的最大值

您好John,谢谢您的回答,如果您不介意,您可以建议我再做一件事,如果我们必须多说一列,说出名称,我想在name say name=Tom中过滤数据,我需要在子查询内部和外部执行多次过滤吗?因为时间戳可能是相同的?类似于select*from temp_test,其中name='Tom'和tmstmp=select maxtmstmp from temp_test,其中name='Tom'和tmstmpwith CTE as ( select id, tmstmp, row_number() over (order by tmstmp desc) as rn from temp_test where tmstmp < TO_DATE('2019-02-15 20:28:00', 'YYYY-MM-DD HH24:MI:SS') ) select * from CTE where rn = 1
select *
from temp_test
where tmstmp = (select max(tmstmp) 
                from temp_test 
                where tmstmp < TO_DATE('2019-02-15 20:28:00', 'YYYY-MM-DD HH24:MI:SS'))