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

PostgreSQL-DISTINCTONおよびGROUPBY構文

    object_idだけでなくすべての列を選択できるようにするため およびMAX(event_timestamp)DISTINCT ONを使用できます

    SELECT DISTINCT ON (object_id) 
        object_id, event_timestamp    ---, more columns
    FROM test_select 
    ORDER BY object_id, event_timestamp DESC ;
    

    event_timestamp DESCで並べ替えた結果が必要な場合 object_idではありません 、派生テーブルまたはCTEに含める必要があります:

    SELECT *
    FROM 
      ( SELECT DISTINCT ON (object_id) 
            object_id, event_timestamp    ---, more columns
        FROM test_select 
        ORDER BY object_id, event_timestamp DESC 
      ) AS t
    ORDER BY event_timestamp DESC ;
    

    または、ROW_NUMBER()などのウィンドウ関数を使用することもできます。 :

    WITH cte AS
      ( SELECT ROW_NUMBER() OVER (PARTITION BY object_id 
                                  ORDER BY event_timestamp DESC) 
                 AS rn, 
               object_id, event_timestamp    ---, more columns
        FROM test_select 
      )
    SELECT object_id, event_timestamp    ---, more columns
    FROM cte
    WHERE rn = 1
    ORDER BY event_timestamp DESC ;
    

    または集計MAX() OVERで :

    WITH cte AS
      ( SELECT MAX(event_timestamp) OVER (PARTITION BY object_id) 
                 AS max_event_timestamp, 
               object_id, event_timestamp    ---, more columns
        FROM test_select 
      )
    SELECT object_id, event_timestamp    ---, more columns
    FROM cte
    WHERE event_timestamp = max_event_timestamp
    ORDER BY event_timestamp DESC ;
    


    1. MySQLをVPSサーバーにインストールし、他のサーバーから接続する

    2. MySqlの個別の値をc#文字列に渡します

    3. Oracleでクエリのパフォーマンスを測定する方法

    4. PLS-00382:関数を実行し、returntypeを変数に入れようとすると、式の型が正しくありません