2016-10-30 9 views
0

私は2つの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 

今、それはto_ID = 19FIRSTメッセージを返しています。私がしたいのは、LATESTというメッセージが最高のmsg_IDで表示されていることを示しています。私はそれにorder byを行うことができますが、私はそれがgroup byステートメントに達する前に何かをしなければならないので、私のSQL文は1つの行を返します。

これらは2つの行が返される資格がある場合は、次の

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

あなたがすることによってこれを行う必要がありますを選択してください。集約を使用するのではなく、正しいメッセージを選択してください。 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; 
関連する問題