日期:2014-05-17  浏览次数:20917 次

oracle的select取最新日期问题
id name desc stsdt
1 name1 desc1 20080202 22:00:00
1 name1 desc2 20080203 23:00:00
1 name1 desc3 20080303 22:00:00
2 name2 desc1 20080202 22:00:00
2 name2 desc2 20080204 22:00:00
2 name3 desc3 20080205 22:00:00

有如上数据,想要的结果是这样的
1 name1 desc3 20080303 22:00:00
2 name3 desc3 20080205 22:00:00
就是取同id中最新日期的那条

注:同id的数据有N>=1条,存在不同id
主要是id和stsdt决定全部。

------解决方案--------------------
select a.* from table a
where not exists(select 1 from table b where b.id = a.id and b.stsdt > a.stsdt)
------解决方案--------------------
1楼正解,让我想起来删除重复数据的方法
------解决方案--------------------
()里面貌似取不到表的别名a的吧?
------解决方案--------------------
select *
from (select A.*,
row_number() over(partition by id order by stsdt desc) AS SHOW
from 表 as A
) b
 where b.SHOW = 1

上面SQL可以。
------解决方案--------------------
引用楼主 advancejar 的帖子:
id name desc stsdt
1 name1 desc1 20080202 22:00:00
1 name1 desc2 20080203 23:00:00
1 name1 desc3 20080303 22:00:00
2 name2 desc1 20080202 22:00:00
2 name2 desc2 20080204 22:00:00
2 name3 desc3 20080205 22:00:00

有如上数据,想要的结果是这样的
1 name1 desc3 20080303 22:00:00
2 name3 desc3 20080205 22:00:00
就是取同id中最新日期的那条

注:同id的数据有N>=1…