mysql 一张表中根据两个字段分组去重,有SQL大佬么(自己已解决)

fuchen
  • 2
新手上路,请多包涵

需求背景

一个消息记录表,要取出与当前用户相关的消息记录,然后两个相同用户之前的消息只展示最新发送一条,重复的去掉

数据表

clipboard.png

预期效果

假如当前用户是8,以上图表数据为例, 我需要取出展示的数据应该是:

记录1,记录4,记录5

请问大佬们,怎么用sql实现以上需求,

补上解决方案

在数据表加了一个group字段,把发送用户id和接收用户id 按用户id从小到大的顺序拼接存在里面
然后查出与当前用8相关的数据,按group这个字段分组 再按send_time 排序就ok了

clipboard.png

回复
阅读 3.7k
2 个回答

你的当前用户是对应的哪个字段,而且为何是拿记录1,4,5, 而不是 记录3,4,5

只是提供一个思路,性能你需要自己再考虑

// 嵌套查询
SELECT * FROM (SELECT * FROM message ORDER BY send_time DESC ) AS tempData GROUP BY from_user_id ORDER BY id ASC
宣传栏