2015-01-02 52 views
0

我正在使用以下SQL從數據庫中獲取最新消息。以下SQL爲我提供了數據庫中最舊的消息。我正在分組message_replay_id,因爲這是數據庫中的常見列,我也在使用它作爲參考。Group By給我從數據庫中最舊的結果

數據庫結構和從查詢結果

enter image description here

這是所有的記錄,而不使用查詢 enter image description here

MySQL的

SELECT * FROM messages 
WHERE message_from = '1' || message_to = '1' 
GROUP BY message_replay_id 
ORDER BY message_id DESC 

正如你所看到的,MESSAGE_ID是

11,7,5,1(最老的ID)

但INFACT最新的ID是

13,7, 6,20

我的問題又是我做錯了,我無法從數據庫中獲得最新結果酶。

+0

你爲什麼用'message_replay_id'分組? –

+0

我是通過'message_replay_id'分組的,因爲這是數據庫中的公共列,我也在使用它作爲參考。 –

+0

這是有點不清楚你想要做什麼。你可以添加表格的示例數據嗎? –

回答

1

要獲得最新結果,您需要匹配最新的行。

最簡單的方法是使用子查詢獲取每個message_replay_id的最新行,然後將其加入消息以獲取其餘細節。

SELECT a.* 
FROM messages a 
INNER JOIN 
(
    SELECT message_replay_id, MAX(message_id) AS latest_message 
    FROM messages 
    WHERE message_from = '1' || message_to = '1' 
    GROUP BY message_replay_id 
) b 
ON a.message_replay_id = b.message_replay_id 
AND a.message_id = b.latest_message 
ORDER BY a.message_id DESC