Du kan nærme dig dette ved at bruge 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 betragter dette som mere "elegant" er nok en smagssag.
Jeg skal påpege, at dette er subtilt anderledes end din forespørgsel. Dette returnerer garanteret én række for hver key
; din kunne returnere flere rækker. Hvis du ønsker den adfærd, skal du blot bruge rank()
eller dense_rank()
i stedet for row_number()
.