在mySQL中使用group by后获取最近的日期
我有一个表,看起来像下面的示例。我需要检索指定用户的最近日期在mySQL中使用group by后获取最近的日期,mysql,sql,Mysql,Sql,我有一个表,看起来像下面的示例。我需要检索指定用户的最近日期 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
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
我希望结果集只包含两个条目,每个条目的最新日期如下:
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
我是否需要进行某种子选择以首先获取最近的日期?您正在按发件人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)
请参阅fiddle。您是否尝试过按日期说明下单??可能重复该操作,但如何筛选特定的接收者id?(例如,接收者_id=7)@Paul请查看我的最新答案。这将返回接收方id=7的每个发送方id的最后一条消息。它正在工作,但我的CPU现在已经挂起超过一分钟了……我当前的表总共有大约300k行,接收方id可能有30行7@Paul如果您尝试只执行子查询,它是否仍然那么慢?如果是,您可能应该在(发送方id、接收方id)上添加一个索引。子查询工作正常,实际上这是返回我需要的数据。谢谢