中小学评优课:能否用SQL语句实现"分组查询后,取各小组最上面一条记录"?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/11 04:49:04
如:
公司ID 人才ID 时间
GS1 RC1 2006-6-13
GS1 RC1 2006-6-25
GS2 RC1 2006-6-13
GS2 RC1 2006-6-25

如何用纯粹SQL语句实现,只得到每个公司的最新入职的人才记录?
即:
GS1 RC1 2006-6-13
GS2 RC1 2006-6-13

务请不吝赐教.
补充说明:非常感谢computer_kill的回答,
首先承认我的一个错误,最新的记录其实应该是
GS1 RC1 2006-6-25
GS2 RC1 2006-6-25
其次,你的方法,我已经试过N次,都不行,原因是:
我想得到最新记录的所有字段,但是象你说的用" SELECT TOP 1 * "配合"group by"是不行的,不知道你试过没,结果都提示"该列不包含在聚合函数中也不包含在Group by中".

SELECT 公司ID, 人才ID, 时间
FROM TABLE
WHERE 时间 = (SELECT MAX(A.时间) FROM TABLE A WHERE A.公司ID= B.公司ID)
上面可以得到每个公司最新入职的人才的记录,如果这个公司最新入职的有多个人同样也可以查出来。

SELECT TOP 1 * FROM 表名 group by 公司ID ORDER BY 时间 desc
注意只得到每个公司的最新入职的人才记录,一定要在时间上降序排列
否则你说是GS1 RC1 2006-6-25 新那 GS1 RC1 2006-6-13 还是新?

公司 人才 时间
a b c
表名T

select t1.a,t.b,t1.c from (select a,max(c) as c from t group by a) t1 inner join t on t1.a=t.a and t1.c=t.c