2014-01-10 127 views
0

我有一个表具有以下3个字段,MySQL的GROUP BY在倒序

msg_id | conversation_id | subject 
1 | 1 | 1st message 
2 | 1 | 2nd message 

我想每个会话的最后一个记录。所以我写了下面的查询,

SELECT max(msg_id) as msg_id, `conversation_id` , `subject` 
FROM `tbl_messages` 
GROUP BY `conversation_id` 
ORDER BY `msg_id` DESC 

它给我的msg_id 2subject它给1st message

我得到的帮助来自这个问题为max()How to group by DESC order

回答

2

如果您想了解过去的信息消息在每个对话中,那么正确的查询是将这些信息连接在一起的那个:

select m.* 
from tbl_messages m join 
    (select conversation_id, max(msg_id) max_msg_id 
     from tbl_messages 
     group by conversation_id 
    ) mc 
    on m.msg_id = mc.max_msg_id; 
+0

是的,现在它的工作完美了,请你也可以稍微解释一下。我不明白m。*和ms – Arif

+1

@sHAmsuLaRiFeEn的含义。 。 。这些是表别名,是SQL语言的标准部分。它们只是'from'子句中表和子查询的较短名称。 –

+0

当然,在连接谓词 – eggyal