Oracle:重复数据去重,只取其中一条(最新时间/其他字段排序规则)数据

一、问题:
//一个会话id代表一个聊天室,
返回该聊天室最新的一条数据显示在会话列表,

二、解决思路:
使用row_number() over 分组排序功能 来解决该问题;
*
1、语法格式:row_number() over(partition by 分组列 order by 排序列 desc);
2、row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。//row_number()从1开始
3、在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。
*
三、SQL:

select * from conversation_table t5
      left join (
      select id,information,information_time from (
               select row_number() over(partition by id order by information_time desc ) t1, t2.id, t2.information,t2.information_time       
              from information_table  t2) 
              where t1 = 1 ) t3 
      on t3.id = t5.id
       where (t5.initiator = 'otjAK47XCpTEX5RHdRH0V7Kn29Hw' or t5.target = 'otjAK47XCpTEX5RHdRH0V7Kn29Hw')
                   and t5.id in (select id from information_table group by id)

参考:
https://blog.csdn.net/tang_jian_dong/article/details/79935347
https://blog.csdn.net/w405722907/article/details/78561995
https://blog.csdn.net/qq_25221835/article/details/82762416

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值