Sql 检索oracle的最新日期

Sql 检索oracle的最新日期,sql,oracle,Sql,Oracle,下面是该表的一个示例 id from to value 1 01.01.20 19.01.20 100 1 20.01.20 31.12.99 100 2 01.01.20 19.01.20 1001 2 25.01.20 31.12.99 1001 3 01.01.20 19.01.20 1002 3 29.01.20 31.12.99 1002 目的是检索最新的

下面是该表的一个示例

id   from        to         value
1    01.01.20    19.01.20   100
1    20.01.20    31.12.99   100
2    01.01.20    19.01.20   1001
2    25.01.20    31.12.99   1001
3    01.01.20    19.01.20   1002
3    29.01.20    31.12.99   1002
目的是检索最新的行

预期的输出应该如下所示

id   from        to         value
1    20.01.20    31.12.99   100
2    25.01.20    31.12.99   1001
3    29.01.20    31.12.99   1002
我试着这样做:

select *
from test
where id in a
AND from = (select max(from) 
   from test 
   where id in a);
但是,我只检索到一行

3    29.01.20    31.12.99   1002
谢谢你的帮助

您似乎想要:

select t.*
from test t
where t.to_date = '31.12.99'

您需要使用
MAX
groupby
进行简单的聚合:

with t as
(
    select 1 id, '01.01.20' "from", '19.01.20' "to", 100 "value" from dual union all
    select 1, '20.01.20', '31.12.99', 100 from dual union all
    select 2, '01.01.20', '19.01.20', 1001 from dual union all
    select 2, '25.01.20', '31.12.99', 1001 from dual union all
    select 3, '01.01.20', '19.01.20', 1002 from dual union all
    select 3, '29.01.20', '31.12.99', 1002 from dual
)
select id, max("from"), max("to"), "value" from t
group by id, "value"
order by id;

        ID from     to            value
---------- -------- -------- ----------
         1 20.01.20 31.12.99        100
         2 25.01.20 31.12.99       1001
         3 29.01.20 31.12.99       1002

在旁注中,
'01.01.20'
是一个字符串,而不是日期。因此,请确保为日期值使用适当的
DATE
数据类型。

我认为您需要每个ID的最新行-

SELECT 
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY id, from DESC) RN
      FROM test)
WHERE RN = 1;

请解释一下逻辑。不清楚。您需要使用
分组依据
这可能会有所帮助:假设最大日期始终为“31-12-99”。这是一个示例,日期并不总是31.12。99@Si . . . 我只能回答被问到的问题。问题中的所有样本数据都是如此。