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

別の列でグループ化された別の列の最大値に基づいて値を取得します

    row_number()を使用してこれにアプローチできます :

    select key, val
    from (select t.*, row_number() over (partition by key order by num desc) as seqnum
          from table_name t
         ) t
    where seqnum = 1;
    

    これをより「エレガント」と見なすかどうかは、おそらく好みの問題です。

    これはあなたの質問とは微妙に異なることを指摘しておきます。これにより、keyごとに1行が返されることが保証されます。;あなたは複数の行を返す可能性があります。その動作が必要な場合は、rank()を使用してください。 またはdense_rank() row_number()の代わりに 。




    1. 接続時にJavaアプリケーションがOracleに対して自身を識別するようにするにはどうすればよいですか?

    2. PostgreSQL、ドラッグアンドスワップ

    3. SQL Serverのテーブルで最適な一意の識別子を見つける方法:sp_special_columns

    4. OracleデータベースのINDICES-OFバインド句を含むFORALLステートメント