1

次の列と行を持つデータベースがあります

sender      receiver   timestamp
1           176        305
176         1          503
1           116        2011
45          1          106
1           176        309

わかった。ここまでは順調ですね。問題は、すべてのデータを一度表示して、タイムスタンプ順に並べ替えたいということです。そのため、次のような結果が得られます。

sender/receiver      timestamp
116                  2011
176                  503
45                   109

これは、送信者/受信者が複数回発生しても、タイムスタンプの最大値のみを取得することを意味します。

私の質問を理解していただければ幸いです。

4

2 に答える 2

2
SELECT  CASE WHEN Sender = 1 THEN Receiver ELSE Sender END `sender/receiver`,
        MAX(timestamp) time_stamp
FROM    tableName
WHERE   1 IN (Sender, Receiver)
GROUP   BY CASE WHEN Sender = 1 THEN Receiver ELSE Sender END
ORDER   BY time_stamp DESC

このCASEステートメントは、Receiveris の値を取り、Sender = 1それ以外の場合はSender. を使用するとMAX()、timestamp の最大値が使用されます。

于 2013-10-30T13:22:48.573 に答える
0

別のオプション:

SELECT sender_receiver
     , Max(timestamp) As max_timestamp
FROM   (
        SELECT sender As sender_receiver
             , timestamp
        FROM   your_table
        WHERE  sender <> 1

        UNION ALL

        SELECT receiver As sender_receiver
             , timestamp
        FROM   your_table
        WHERE  receiver <> 1
       ) As x
ORDER
    BY max_timestamp
于 2013-10-30T13:28:43.170 に答える