【问题标题】:How to remove duplicate results? [duplicate]如何删除重复的结果? [复制]
【发布时间】:2020-02-04 16:25:18
【问题描述】:

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

这是我的sqlfiddle

【问题讨论】:

  • 您想要每个用户的最新日期?如果是,则只需添加 GROUP BY 并获取用户的最大日期。见:sqlfiddle.com/#!9/5d0482/8
  • @MadhurBhaiya 有没有办法获取与日期相同的行的 txt?
  • 要获取txt,请检查重复标记问题中的答案。这是一个非常普遍的问题。我在问题中添加了greatest-n-per-group 标签。你可以在这里获得大量的技术:stackoverflow.com/questions/tagged/…

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


【解决方案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

【讨论】:

  • 这很好用,但如果我想显示“a.txt”,它会显示旧的 txt 而不是最新的。
  • 你可以使用 Min(date)
猜你喜欢
  • 1970-01-01
  • 2017-04-25
  • 2021-07-03
  • 1970-01-01
  • 2019-06-19
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多