Můžete to provést pomocí 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;
Zda to považujete za „elegantnější“, je pravděpodobně věcí vkusu.
Měl bych zdůraznit, že se to mírně liší od vašeho dotazu. To je zaručeno, že vrátí jeden řádek pro každý key
; váš může vrátit více řádků. Pokud chcete toto chování, stačí použít rank()
nebo dense_rank()
místo row_number()
.