sql >> データベース >  >> RDS >> Mysql

mysqlの2人のユーザーの通信間の最新のメッセージを選択します

    SELECT data.* FROM 
    (SELECT MAX(sendtime) AS sendtime 
             FROM data 
             WHERE 1 IN (sender,receiver)
             GROUP BY IF (1 = sender,receiver,sender)) AS latest
    LEFT JOIN data ON latest.sendtime = data.sendtime AND 1 IN (data.sender, data.receiver)
    GROUP BY IF (1 = data.sender,data.receiver,data.sender)
    

    外部のGROUP BYを避けるために、テーブルで一意のシーケンスIDを使用することをお勧めします 。一意のmessage_idをインクリメントする場合 (つまり、より大きなmessage_id 後のsendtimeに対応します )、クエリははるかに簡単になります:

    SELECT data.* FROM 
    (SELECT MAX(message_id) AS message_id 
             FROM data 
             WHERE 1 IN (sender,receiver)
             GROUP BY IF (1 = sender,receiver,sender)) AS latest
    LEFT JOIN data USING(message_id)
    


    1. PostgreSQLでグループごとに最初の行を取得する方法

    2. MySQL:全文検索に問題があります-結果が返されません

    3. SQLで列と行を転置する簡単な方法は?

    4. ADO.NETでMySQLユーザー変数を使用する方法