2011-10-06 74 views
1

我有一个表WorkLog(personId number, actionType number, doneOn timeStamp),现在我怎么能得到每个人的最近的行动。Sql获得每种类型的顶行

数据就会像

p1 a1 timestamp1 
p1 a2 timestamp2 
p2 a1 timestamp3 
p2 a3 timestamp4 
p3 a1 timestamp5 

输出应该是

p1 a2 timestamp2 
p2 a1 timestamp3 
p3 a1 timestamp5 

数据库DB2是

回答

6

这是一个 “每组最大n” 个查询。据here下面应该在DB2工作

WITH T AS 
(
SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY personId ORDER BY doneOn DESC) RN 
FROM WorkLog 
) 
SELECT personId , actionType , doneOn 
FROM T 
WHERE RN=1