小编典典

根据第二列中具有最大日期值的列选择不同的值

sql

标题有点复杂。我很抱歉,但对于非SQL用户来说,查询也很复杂。

我有一个messages具有以下结构的表:

消息(id,sender_id,receiver_id,message_datetime)

我的目标是选择receiver_id来自不同发件人的最新邮件。

例如,当我这样做时:

SELECT * 
FROM  `message` 
WHERE  `receiver_id` =1

我得到类似的东西:

1005  |   2    |    1    |  2015-11-08
1004  |   3    |    1    |  2015-11-07
1003  |   3    |    1    |  2015-11-06
1002  |   2    |    1    |  2015-11-05 
1001  |   2    |    1    |  2015-11-04

虽然我需要这样的东西:

1005  |   2    |    1    |  2015-11-08
1004  |   3    |    1    |  2015-11-07

非常感谢您通常的专家指导。我真的被这样的查询所困扰。再次感谢您,感谢您格式化错误。


阅读 113

收藏
2021-05-16

共1个答案

小编典典

您需要创建一个子查询,该子查询通过sender_id返回给定接收者的最大消息ID,并将其加入message表以获取所有其他字段:

SELECT m.* 
FROM  `message` AS m
INNER JOIN (SELECT sender_id, MAX(message_date) as md
                FROM message WHERE  `receiver_id` =1 GROUP BY sender_id) AS t
ON m.message_date=t.md and m.sender_id=t.sender_id
WHERE  `receiver_id` =1
2021-05-16