2016-10-30 27 views
0

我有兩個SQL表,其中一個有用戶,另一個有消息。返回來自分組郵件的最後一條消息SQL

現在我的查詢是:

SELECT messages.*, username FROM messages 
JOIN users ON messages.from_ID = users.user_ID 
WHERE to_ID = 19 
GROUP BY thread_ID 
ORDER BY msg_ID DESC; 

實體(消息):

msg_ID 
from_ID 
to_ID 
subject 
message 
date 

眼下,它返回FIRST消息,其中to_ID = 19。我想要做的是顯示最新的消息,由最高的msg_ID排序。我可以對它做一個order by,但是我的sql語句只返回一行,所以我必須在它到達group by聲明之前做一些事情。

如果這些是兩行有資格被退回:

msg_ID from_ID to_ID subject message date thread_id username 
15 26 19 Hey testing string2 1477750565 1 testing 
17 26 19 Hey testing string. 1477750594 1 testing 

我現在的結果是:

msg_ID from_ID to_ID subject message date thread_id username 
15 26 19 Hey testing string2 1477750565 1 testing 

我想要什麼:

msg_ID from_ID to_ID subject message date thread_id username 
17 26 19 Hey testing string. 1477750594 1 testing // msg_ID is higher here 

回答

1

你應該做到這一點選擇正確的消息,而不是使用聚合。以下是一種方法:

SELECT m.*, u.username 
FROM messages m JOIN 
    users u 
    ON m.from_ID = u.user_ID 
WHERE m.to_ID = 19 AND 
     m.msg_id = (SELECT MAX(m2.msg_id) 
        FROM messages m2 
        WHERE m2.thread_id = m.thread_id AND m2.to_ID = m.to_ID 
       ) 
ORDER BY msg_ID DESC; 
相關問題