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)
该组显示"这是第一条消息",我希望"这是第三条消息",因为这是最新的记录/消息.
干杯
这可能有效(但不能保证):
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)
通过使用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)
| 归档时间: |
|
| 查看次数: |
37377 次 |
| 最近记录: |