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

有表T1姓名分值时间戳张三802011-03-0111:11:00张三702011-03-0213:10:00张三772011-03-0421:00:00李四782011... 有表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语句该如何写?急!!!
展开
 我来答
badkano
2015-12-25 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885373
团长

向TA提问 私信TA
展开全部

可用row_number来实现。

如emp表中有如下数据:

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

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

查询结果:

flyingFish211
2011-03-23 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.1亿
展开全部
SELECT 姓名, 分值, 时间戳
FROM (SELECT 姓名, 分值, 时间戳, ROW_NUMBER() OVER(PARTITION BY 姓名 ORDER BY 时间戳 DESC) rk
FROM T1) tab1
WHERE rk = 1
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
厚翠柏02E
2011-03-23
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
select * from (select * from scott.emp order by rownum desc) where rownum <=1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aleafs
2011-03-23 · 超过55用户采纳过TA的回答
知道小有建树答主
回答量:364
采纳率:0%
帮助的人:219万
展开全部
试试这个:
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dingqiang123
2011-03-23 · TA获得超过199个赞
知道小有建树答主
回答量:321
采纳率:100%
帮助的人:110万
展开全部
SELECT * FROM(SELECT T.*,RANK() OVER(PARTITION BY 姓名 ORDER BY T.时间戳 DESC) RK FROM T1 T) WHERE RK <=1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式