如何删除重复的结果?

时间:2019-10-07 11:14:24

标签: mysql left-join union greatest-n-per-group

我正在使用mysql编写消息系统。 当我列出与之交谈的用户时,一切正常,直到我想添加对话的最后日期或对话开始。 当我添加a.date时,如果日期不同,则会得到重复的结果。

这是我的sqlfiddle

1 个答案:

答案 0 :(得分:1)

由于您只拉了user_id,所以在两种情况下(发送/接收),它都为您提供了独特的记录。但是到目前为止,它不再是唯一的。您需要执行以下操作:

SELECT temp.id_user, MAX(temp.date) as date
FROM 
(
SELECT users.id_user,
       a.date
FROM   users
       LEFT JOIN message AS a
              ON users.id_user = a.id_user_recipient
       LEFT JOIN message AS b
              ON a.id_user_recipient = b.id_user_sender
WHERE  a.id_user_sender = 1
UNION DISTINCT
SELECT users.id_user,
       a.date
FROM   users
       LEFT JOIN message AS a
              ON users.id_user = a.id_user_sender
       LEFT JOIN message AS b
              ON a.id_user_sender = b.id_user_recipient
WHERE  a.id_user_recipient = 1  
) as temp 
GROUP BY temp.id_user;

抓取max(date)将确保仅返回与group by一样的一条记录