一、问题:
//一个会话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