MySQL选择GROUP BY命令

puk*_*978 9 mysql group-by sql-order-by

我有一个mysql语句

SELECT * 
FROM tbl_messages 
WHERE to_user_id = '$user_id' OR from_user_id = '$user_id' 
GROUP BY from_user_id 
ORDER BY date_sent DESC
Run Code Online (Sandbox Code Playgroud)

并且它产生了正确的结果,但它们的顺序不正确.

分组效果很好,但是组中显示的记录是第一个记录在数据库中的记录,但我希望在每个组中显示最新记录.

有没有办法为每个组显示最新记录?

2011-12-19 12:16:25 This is the first message
2011-12-19 12:18:20 This is the second message
2011-12-19 12:43:04 This is the third message
Run Code Online (Sandbox Code Playgroud)

该组显示"这是第一条消息",我希望"这是第三条消息",因为这是最新的记录/消息.

干杯

ype*_*eᵀᴹ 9

这可能有效(但不能保证):

SELECT * 
FROM
  ( SELECT *
    FROM tbl_messages 
    WHERE to_user_id = '$user_id' OR from_user_id = '$user_id' 
    ORDER BY date_sent DESC
  ) tmp
GROUP BY from_user_id 
ORDER BY date_sent DESC
Run Code Online (Sandbox Code Playgroud)

这应该工作:

SELECT t.* 
FROM 
    tbl_messages AS t
  JOIN
    ( SELECT from_user_id 
           , MAX(date_sent) AS max_date_sent
      FROM tbl_messages 
      WHERE to_user_id = '$user_id' OR from_user_id = '$user_id' 
      GROUP BY from_user_id 
    ) AS tg
    ON  (tg.from_user_id, tg.max_date_sent) = (t.from_user_id, t.date_sent)
ORDER BY t.date_sent DESC
Run Code Online (Sandbox Code Playgroud)


111*_*01b 8

通过使用GROUP BY包装查询,在ORDER BY之后执行GROUP BY:

SELECT t.* FROM (SELECT * FROM table ORDER BY time DESC) t GROUP BY t.from
Run Code Online (Sandbox Code Playgroud)