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

グループごとに1列の最大値を持つ行を返します

    これはサブクエリなしでも可能です:

    SELECT DISTINCT
           id
          ,max(round) OVER (PARTITION BY id) AS round
          ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
    FROM   SCORES
    WHERE  id IN (1,2,3)
    ORDER  BY id;
    

    要求したものを正確に返します。
    重要なポイントは、DISTINCTです。 に適用されます ウィンドウ関数。

    SQLフィドル。

    同じウィンドウを2回使用するため、おそらく高速です:

    SELECT DISTINCT
           id
          ,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) AS round
          ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
    FROM   SCORES
    WHERE  id IN (1,2,3)
    ORDER  BY id;
    

    それ以外の場合も同じようにします。



    1. DelphiでのBDEとADO

    2. 文字列を分割してSQLServerのテーブルに値を挿入する方法

    3. 2つのパーティショニングの特殊性

    4. SQLServerでの7日間の移動平均のSQLクエリ