oracle的select取最新日期问题

advancejar 2008-05-20 11:00:43
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决定全部。
...全文
372 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2008-05-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 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…
[/Quote]

select t.* from tb t where stsdt = (select max(stsdt) from tb where id = t.id) order by t.id
ehuman 2008-05-20
  • 打赏
  • 举报
回复
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可以。
qingrou123 2008-05-20
  • 打赏
  • 举报
回复
()里面貌似取不到表的别名a的吧?
chensi05 2008-05-20
  • 打赏
  • 举报
回复
1楼正解,让我想起来删除重复数据的方法
yxiaowang 2008-05-20
  • 打赏
  • 举报
回复
select a.* from table a
where not exists(select 1 from table b where b.id = a.id and b.stsdt > a.stsdt)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧