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

猜你喜欢

转载自blog.csdn.net/qq_35808136/article/details/88183608