U kunt dit benaderen met 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;
Of je dit 'eleganter' vindt, is waarschijnlijk een kwestie van smaak.
Ik moet erop wijzen dat dit subtiel verschilt van uw vraag. Dit levert gegarandeerd één rij op voor elke key; de jouwe kan meerdere rijen retourneren. Als je dat gedrag wilt, gebruik dan gewoon rank() of dense_rank() in plaats van row_number() .