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

1つの列に最大値を持つ行を選択するSQLクエリの記述方法

    この種の要件(1つの列で最大または最小が必要で、別の列でグループ化されているが、最大または最小行のすべてのデータが必要な場合)は、ほとんど分析関数です。 のためです。 row_numberを使用しました -同点の可能性がある場合は、割り当てを明確にする必要があり(質問の下の私のコメントを参照)、詳細によっては、別の分析関数がより適切な場合があります-おそらくrank()

    with
         my_table ( id, name, ref, dt, frm ) as (
           select 10, 'Ant' , 100, date '2017-02-02', 'David' from dual union all
           select 10, 'Ant' , 300, date '2016-01-01', 'David' from dual union all
           select  2, 'Cat' ,  90, date '2017-09-09', 'David' from dual union all
           select  2, 'Cat' , 500, date '2016-02-03', 'David' from dual union all
           select  3, 'Bird', 150, date '2017-06-28', 'David' from dual
         )
    -- End of simulated table (for testing purposes only, not part of the solution).
    -- SQL query begins BELOW THIS LINE.
    select   id, name, ref, dt, frm
    from     (
               select id, name, ref, dt, frm,
                      row_number() over (partition by id order by ref desc, dt desc) as rn
               from   my_table
             )
    where    rn = 1
    order by dt desc
    ;
    
    ID  NAME  REF  DT          FRM 
    --  ----  ---  ----------  -----
     3  Bird  150  2017-06-28  David
     2  Cat   500  2016-02-03  David
    10  Ant   300  2016-01-01  David
    


    1. ORA-22288:ファイルまたはLOB操作FILEOPENが失敗しました。ファイル名、ディレクトリ名が正しくありません

    2. 他のユーザーにv$sessionへのSELECTアクセスを許可する

    3. 内部結合でのインデックス使用の代わりにMySQL範囲チェック

    4. CreateSQLQueryは機能しますが、QueryOverはNHibernateでは機能しません