Можете да подходите към това с помощта на 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()
.