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() .