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