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