Можете да подходите към това с помощта на 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; вашият може да върне няколко реда. Ако искате това поведение, просто използвайте rank() или dense_rank() вместо row_number() .