SELECT *
FROM message m3
WHERE id NOT IN (#查询需要去重的id
select DISTINCT m1.id
FROM message AS m1
INNER JOIN message AS m2
WHERE m1.id != m2.id #过滤掉自身关联
AND ((
m1.receiveid = m2.sendid
AND m1.sendid = m2.receiveid)
OR (
m1.sendid = m2.sendid
AND m1.receiveid = m2.receiveid ) )
AND m1.create_time < m2.create_time #
GROUP BY m1.id,
m2.id);
应该是消息的去重,给一个简单思路吧,使用自连接
初始化表:
Sql脚本:
这里有个问题,就是需要去重的两条消息的时间是相同的话,不知道你要怎么处理。希望能帮到你。
不知道数据用一次还是经常需要用,不经常的话可以参考楼上的写法,如果经常使用建议新建一个表,不然效率太低!
小哥,如果你一定要使用这种结构.给你个思路,仅供参考,当然我思考的是在不改变你现在的结构的情况下,会稍微简单点.就是 ,我劝你在加一个字段 这个字段的类型是一个字符串类型,里面存储的数据是sendId和revivedId的值.中间可以用一个字符拼接.拼接的时候稍微封装一个方法.按照小的在前,大的在后做拼接,到时候查的时候可以根据这个字段来分组,然后找最新的.就是你的需求了.写了个简单的例子,希望你能明白我的意思:
================

源数据: