Du kan närma dig detta med 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;
Om du anser det här mer "elegant" är nog en smaksak.
Jag bör påpeka att detta skiljer sig subtilt från din fråga. Detta returnerar garanterat en rad för varje key
; din kan returnera flera rader. Om du vill ha det beteendet, använd bara rank()
eller dense_rank()
istället för row_number()
.