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 . . . 我只能回答被问到的问题。问题中的所有样本数据都是如此。