0

以下のサンプルのようなテーブルがあります。指定したユーザーの最新の日付を取得する必要があります。

id sender_id receiver_id content date               
-- --------- ----------- ------- ----               
1  5         7           test    2013-03-13 10:33:54
2  13        7           test 2  2012-03-13 12:01:36
3  5         7           test 3  2013-01-05 09:15:37
4  13        7           test 4  2013-04-05 08:17:39

私の現在のSQLは次のようになります。

SELECT * FROM `messages` WHERE receiver_id=7 group by sender_id

結果セットには、次のように、それぞれの最新の日付を持つ 2 つのエントリのみが含まれると予想されます。

4  13        7           test 4  2013-04-05 08:17:39
1  5         7           test    2013-03-13 10:33:54

最初に最新の日付を取得するために、何らかのサブセレクトを行う必要がありますか?

4

1 に答える 1

2

グループ化していますsender_idが、すべての列を返します。集約されていない行の値は低くなり、order by の影響を受けない可能性があります。

次のようなクエリを使用して、必要な結果を取得できます。

SELECT *
FROM   messages
WHERE  (sender_id, receiver_id, date) IN (
          SELECT   sender_id, receiver_id, MAX(date)
          FROM     messages
          WHERE    receiver_id=7
          GROUP BY sender_id, receiver_id)

ここでフィドルを参照してください。

于 2013-05-10T23:00:25.507 に答える