Oracle中实现分组后按时间排序取第一条

本文介绍了一种使用SQL语句去除重复数据并选取最新记录的方法。通过PARTITION BY和ROW_NUMBER()函数组合,实现了对特定字段(如PARTNER_ID)去重,并按另一字段(如VISIT_DATE)进行排序,确保每组中只保留最新记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现效果

①原表效果:存在重复的编号(PARTNER_ID)内容,访问时间(VISIT_DATE)不同

 

②分组排序后取第一条的效果:【实现对编号去重,且取访问时间最新的一条数据】

二、sql语句

2.1、基础语句

select  t.*  
   from (select a.*, row_number() over(partition by 需要分组的字段 order by 排序的字段 desc) rn  
           from 表 a) t  
  where t.rn = 1  

2.2、实现语句

【实现对编号去重,且取访问时间最新的一条数据】的sql语句如下:

SELECT * FROM(
SELECT ROW_NUMBER()over(PARTITION by PARTNER_ID ORDER BY VISIT_DATE DESC) as RN,VI.PARTNER_ID,VI.VISIT_DATE
  FROM VISIT_INFO VI
) dual  WHERE RN=1

三、参考资料

①分组函数 partition by 的详解,与order by 区别

高级统计(数据报表利器)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛奶咖啡13

我们一起来让这个世界有趣一点…

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值