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

メッセージテーブルの最新メッセージをユーザーごとにグループ化して表示

    これはかなり効率的です:

    SELECT u.name, sub.*
    FROM  (
       SELECT DISTINCT ON (1)
              m.message_from AS user_id
            , m.message AS last_message
       FROM   users    u
       JOIN   messages m ON m.message_to = u.id
       WHERE  u.name = 'Paul'   -- must be unique
       ORDER  BY 1, m.id DESC
       ) sub
    JOIN  users u ON sub.user_id = u.id;
    

    サブクエリsubに最新のメッセージがあるすべてのユーザーを計算します DISTINCT ONを使用する 。次に、totableusersに参加します 名前を解決するためにもう一度。

    DISTINCT ONの詳細 :
    各GROUPBYグループの最初の行を選択しますか?

    余談ですが、列名として「id」と「name」を使用することは、あまり役立つ命名規則ではありません。



    1. 42809 Asp.Net C#アプリケーションからPostgreSQLストアドプロシージャを実行中にエラーが発生しました

    2. PHPのbindParamは、PARAM_INToutパラメーターでは機能しないようです。

    3. を介してUbuntuにPostgresqlをサイレントインストールする方法。 Dockerfile?

    4. ストアドプロシージャ内に一時テーブルを作成する