DB2:关于分组的SQL语句

zkhj 2010-11-23 09:19:25
表结构及数据如下如下:

ID, LastUpdateTime , Field1
1 2001-01-01 a
2 2003-03-03 b
3 2004-04-04 b
4 1999-09-09 a


我希望通过SQL,得到如下结果: 即,按Field1 进行分组,取日期最大的一条记录的ID。

a 1 (Field1 = a 时,日期最大的一条记录,对应的ID 为 1 )
b 3 (Field1 = b 时,日期最大的一条记录,对应的ID 为 3 )


请高手指点。谢了!

...全文
258 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaojianmi1 2010-11-23
  • 打赏
  • 举报
回复
select ID, Field1 from table1 A, (
select Field1, max(LastUpdateTime) as LastUpdate from table1 group by Field1
) as B
where A.Field1 = B.Field1 and A.LastUpdateTime = B.LastUpdate
zkhj 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwwwb 的回复:]
可以
select a.* from tt a
inner join
(select Field1,max(LastUpdateTime) as ma from tt group by Field1) b
on a.Field1=b.Field1 and a.LastUpdateTime=b.ma
[/Quote]

这个方法我也知道,但总觉得要弄个子表太麻烦。
不过还是谢了。
wwwwb 2010-11-23
  • 打赏
  • 举报
回复
or
select a.LastUpdateTime,a.Field1 from tt a left join tt b
on a.Field1=b.Field1 and a.LastUpdateTime<=b.LastUpdateTime
group by a.LastUpdateTime,a.Field1 having count(b.id)=1
wwwwb 2010-11-23
  • 打赏
  • 举报
回复
可以
select a.* from tt a
inner join
(select Field1,max(LastUpdateTime) as ma from tt group by Field1) b
on a.Field1=b.Field1 and a.LastUpdateTime=b.ma
zkhj 2010-11-23
  • 打赏
  • 举报
回复
不能通过 group by的方式吗
wwwwb 2010-11-23
  • 打赏
  • 举报
回复
select a.* rom tt a where not exists(select 1 from tt where a.Field1=Field1 and
a.LastUpdateTime<LastUpdateTime)
ACMAIN_CHM 2010-11-23
  • 打赏
  • 举报
回复
下面是其中比较常见和通用的方法。

select *
from 表结构及数据 a
where not exists(select 1 from 表结构及数据 where Field1=a.Field1 and LastUpdateTime>a.LastUpdateTime)
ACMAIN_CHM 2010-11-23
  • 打赏
  • 举报
回复
参考下贴中的多种方法

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集,及散分....

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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