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()
の代わりに 。