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

SQL:他のテーブルからgroup byし、結果を反転します

    PostgreSQLでは非常にシンプルで高速です DISTINCT ONを使用 -標準SQLではないため、すべてのRDBMSで利用できるわけではありません。

    質問にはそれについては触れられていませんが、コード例から導き出されて、実際には、特定のauthorの各受信者の「最終日」の行を探しています。

    SELECT DISTINCT ON (r.recipient)  m.*
    FROM   message   m
    JOIN   recipient r ON r.m_id = m.id
    WHERE  m.author = 1
    ORDER  BY r.recipient, m.date DESC, r.m_id -- to break ties
    

    詳細と複数のSQL標準の代替案はこちら:
    各GROUPBYグループの最初の行を選択しますか?

    基本的な標準SQLを使用した別のソリューション。 MySQLを含むすべての主要なRDBMSで動作します (そのタグが追加されているため):

    SELECT m.* 
    FROM   message   m
    JOIN   recipient r ON r.m_id = m.id
    WHERE  m.author = 1
    AND NOT EXISTS (
       SELECT 1
       FROM   message   m1
       JOIN   recipient r1 ON r1.m_id = m1.id
       WHERE  r1.recipient = r.recipient 
       AND    m1.author = 1
       AND    m1.date > m.date
       )
    

    最新の日付の行のみがNOT EXISTSを通過します 反半結合。



    1. PDO例外を処理する方法

    2. PostgreSQLをリモートで管理するためのヒント

    3. AccessはODBCデータソースとどのように通信しますか?パート6

    4. phpjson_encodemysqlの結果