求分组最大的sql语句

By | 2012 年 11 月 4 日

今天遇到一个问题,有一张数据库表格:

salary
uid,sal,time,state
------------------
1,1100,2012-1-1,1
1,1200,2012-2-1,1
1,1300,2012-3-1,1
2,2100,2012-1-1,1
2,2200,2012-2-1,1
3,3100,2012-1-1,1
4,4100,2012-1-1,1
4,4200,2012-2-1,1

希望得到这样一个查询:每一个成员的最后一次工资记录。即,希望得到的是:

1,1300,2012-3-1,1
2,2200,2012-2-1,1
3,3100,2012-1-1,1
4,4200,2012-2-1,1

这个实在不好弄,开始想max和groupby,不过无法取得出了max里面和groupby里面的其他字段。



然后百度找到了一个解决方法,挺有意思的:

select * from salary s1 where not exists (select * from salary where uid = s1.uid and time > s1.time)

大概解释是:找到time最大的,在uid相等的情况下,之后最大的那一条记录没办法满足time > s1.time(没有比它更大的)。

不过这这解决了“最大”这个问题,如果扩展一下,要取最大N个怎么办?

2 thoughts on “求分组最大的sql语句

  1. emptyhua

    翔宇,取n条解决方案在这里啊,我刚遇到http://bluehua.org/2012/11/08/1936.html

    Reply

发表评论

电子邮件地址不会被公开。 必填项已用*标注