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

最後の値だけを返すPostgreSQL集計またはウィンドウ関数

    DISTINCT プラスウィンドウ関数

    DISTINCTを追加します 条項:

    SELECT DISTINCT a
         , last_value(b) OVER (PARTITION BY a ORDER BY b
                               RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
    FROM  (
       VALUES
         (1, 'do not want this')
        ,(1, 'just want this')
       ) sub(a, b);
    

    DISTINCTの詳細 :

    DISTINCT ON

    PostgreSQLには、SQL標準の次の拡張機能もあります。

    SELECT DISTINCT ON (a)
           a, b
    FROM  (
       VALUES
         (1, 'do not want this')
       , (1, 'just want this')
       ) sub(a, b)
    ORDER  BY a, b DESC;
    

    DISTINCT ONの詳細 そしておそらくより速い代替案:

    単純な骨材を使用した単純なケース

    もし あなたのケースは実際にはデモと同じくらい単純です(そしてその最後の行から追加の列は必要ありません)、単純な集計関数はより単純になります:

    SELECT a, max(b)
    FROM  (
       VALUES
         (1, 'do not want this')
       , (1, 'just want this')
       ) sub(a, b)
    GROUP  BY a;
    


    1. 列ASCで並べ替えますが、最初にNULL値ですか?

    2. SQLServerデータをCSVファイルにエクスポートする

    3. メールアドレスを主キーとして使用しますか?

    4. クラス出席レコード形式SQLクエリ