如何在ORACLE中筛选出所有人的最后一条记录?

有表T1
姓名 分值 时间戳
张三 80 2011-03-01 11:11:00
张三 70 2011-03-02 13:10:00
张三 77 2011-03-04 21:00:00
李四 78 2011-03-02 10:11:00
李四 88 2011-03-12 19:41:00
王五 90 2011-03-12 19:41:00
赵六 87 2011-03-01 11:11:00

我想要把所有人最近的一条记录筛选出来变成这样的结果:

姓名 分值 时间戳
张三 77 2011-03-04 21:00:00
李四 88 2011-03-12 19:41:00
王五 90 2011-03-12 19:41:00
赵六 87 2011-03-01 11:11:00

请问SQL语句该如何写?急!!!

可用row_number来实现。

如emp表中有如下数据:

现要提取按sal排序后,sal最大的一条数据,可用如下语句:

select t.* from
(select row_number() over (order by sal desc) rn,emp.* from emp) t
where rn=1;

查询结果:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-23
SELECT 姓名, 分值, 时间戳
FROM (SELECT 姓名, 分值, 时间戳, ROW_NUMBER() OVER(PARTITION BY 姓名 ORDER BY 时间戳 DESC) rk
FROM T1) tab1
WHERE rk = 1本回答被提问者和网友采纳
第2个回答  2011-03-23
select * from (select * from scott.emp order by rownum desc) where rownum <=1
第3个回答  2011-03-23
试试这个:
SELECT T1.* FROM T1 RIGHT INNER JOIN (SELECT username, MAX(timestamp) AS tm FROM T1 GROUP BY username) T2 ON T1.username = T2.username AND T1.timestamp = T2.tm
第4个回答  2011-03-23
SELECT * FROM(SELECT T.*,RANK() OVER(PARTITION BY 姓名 ORDER BY T.时间戳 DESC) RK FROM T1 T) WHERE RK <=1
相似回答