MySQL按顺序选择分组
我有一个mysql语句MySQL按顺序选择分组,mysql,group-by,sql-order-by,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 它正在产生正确的结果,但是它们的顺序不正确 分组工作得很好,但它在组中显示的记录是第一个记录到DB中,但我希望在每个组中显示最新的记录 是否有办法显示每个组的最新记录 2011-12-19 12:16:
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
它正在产生正确的结果,但是它们的顺序不正确
分组工作得很好,但它在组中显示的记录是第一个记录到DB中,但我希望在每个组中显示最新的记录
是否有办法显示每个组的最新记录
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
该组显示“这是第一条消息”,我希望显示“这是第三条消息”,因为这是最新的记录/消息
干杯你的意思是这样的: SELECT * FROM tbl_messages WHERE to_user_id = '$user_id' OR from_user_id = '$user_id' GROUP BY from_user_id ORDER BY from_user_id, date_sent DESC
SELECT t.* FROM (SELECT * FROM table ORDER BY time DESC) t GROUP BY t.from
如果消息表的主键是自动递增的,并且所有消息本质上都是自动递增的,那么最大的数字就是最近的日期。。。但是,由于我不知道,我将基于发送的最大日期而不是最大SomeIDKey,但原理是相同的
select
tm2.*
from
( select tm1.from_user_id,
max( tm1.date_sent ) LatestMsgDate
from tbl_messages tm1
group by tm1.from_user_id ) MaxPerUser
left join tbl_messages tm2
on MaxPerUser.From_User_ID = tm2.From_User_ID
AND MaxPerUser.LatestMsgDat = tm2.Date_Sent
order by
date_sent DESC
这可能有效,但不能保证:
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
这应该起作用:
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
通过将查询包装为GROUP BY,在订单之后执行GROUP BY,如下所示: SELECT * FROM tbl_messages WHERE to_user_id = '$user_id' OR from_user_id = '$user_id' GROUP BY from_user_id ORDER BY from_user_id, date_sent DESC
SELECT t.* FROM (SELECT * FROM table ORDER BY time DESC) t GROUP BY t.from
查询应该显示什么?如果您只需要这两列,例如ID和它的最新时间戳,这可能会起作用:。这比在一个有数百万行的大表上使用子查询要快。这似乎是可行的。只需稍加修改即可在GROUP BY之前添加tbl_消息,但看起来不错。谢谢谢谢拯救我的一天,在学校里我学到了更多关于subquerys的知识。。。我不记得这个伟大的查询。。。我的老师。。。旧内存如何在MaxPerUser中添加ORDER BY并在查询结束时添加GROUP BY。@MohammedAbrarAhmed,没有适用于内部MaxPerUser查询的ORDER BY。但是,如果您想要基于最新消息日期的外部结果,您可以按MaxPerUser.LatestMsgDate排序-如果您正考虑将最新消息浮动到顶部的话。即使我将ASC放在查询t中,它也会被删除。