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