0

我有一张类似于下面示例的表格。我需要检索指定用户的最近日期。

id sender_id receiver_id content date               
-- --------- ----------- ------- ----               
1  5         7           test    2013-03-13 10:33:54
2  13        7           test 2  2012-03-13 12:01:36
3  5         7           test 3  2013-01-05 09:15:37
4  13        7           test 4  2013-04-05 08:17:39

我当前的 SQL 如下所示:

SELECT * FROM `messages` WHERE receiver_id=7 group by sender_id

我希望结果集只包含两个条目,每个条目的最新日期如下:

4  13        7           test 4  2013-04-05 08:17:39
1  5         7           test    2013-03-13 10:33:54

我是否需要进行某种子选择才能首先获取最新日期?

4

1 回答 1

2

您正在分组sender_id但返回所有列。非聚合行的价值可能会被削弱并且不受 order by 的影响。

您可以使用这样的查询来获得所需的结果:

SELECT *
FROM   messages
WHERE  (sender_id, receiver_id, date) IN (
          SELECT   sender_id, receiver_id, MAX(date)
          FROM     messages
          WHERE    receiver_id=7
          GROUP BY sender_id, receiver_id)

在此处查看小提琴。

于 2013-05-10T23:00:25.507 回答