2014-01-10 70 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