标题有点复杂。我很抱歉,但对于非SQL用户来说,查询也很复杂。
我有一个messages具有以下结构的表:
messages
消息(id,sender_id,receiver_id,message_datetime)
我的目标是选择receiver_id来自不同发件人的最新邮件。
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
非常感谢您通常的专家指导。我真的被这样的查询所困扰。再次感谢您,感谢您格式化错误。
您需要创建一个子查询,该子查询通过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