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

时间:2015-11-25 13:18:05

标签: mysql 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

非常感谢您的常规专家指导。我真的很困惑这样的查询。再次感谢并抱歉格式错误。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

    Select * from (
           Select * from `Message` where receiver_id=1 order by message_datetime desc
) a group by a.sender_id

此查询首先按日期对数据进行排序,然后按发件人ID分组。