2013-05-10 55 views
0

我有一张表,如下面的示例。我需要检索指定用户的最近日期。通过mySQL使用group后获取最近的日期

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 

待办事项我需要做某种子选择来首先得到最近的日期?

+0

您是否试过'ORDER BY date DESC'? – 2013-05-10 22:59:47

+0

可能重复的[选择最近的结果基于字段的复合](http://stackoverflow.com/questions/3817204/select-most-recent-results-based-on-composite-of-fields) – Barmar 2013-05-10 23:30:44

回答

2

您正在按sender_id分组,但返回所有列。非汇总行的值可能不受限制,也不会受到订单的影响。

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

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) 

请参阅小提琴here

+0

这有效,但我如何过滤特定的receiver_id? (例如WHERE receiver_id = 7) – Paul 2013-05-10 23:06:53

+0

@Paul请参阅我的更新答案。这将返回每个sender_id的最后一条消息,它的receiver_id = 7 – fthiella 2013-05-10 23:13:32

+0

它正在工作,但是现在我的CPU已经挂了一分钟了......我当前的表总共有大约30万行,可能30行是receiver_id 7 – Paul 2013-05-10 23:21:46