Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mySQL中使用group by后获取最近的日期_Mysql_Sql - Fatal编程技术网

在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)上添加一个索引。子查询工作正常,实际上这是返回我需要的数据。谢谢