Możesz podejść do tego za 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;
To, czy uważasz to za bardziej „eleganckie”, jest prawdopodobnie kwestią gustu.
Powinienem zaznaczyć, że jest to nieco inne niż twoje zapytanie. To gwarantuje zwrócenie jednego wiersza dla każdego key
; Twój może zwrócić wiele wierszy. Jeśli chcesz tego zachowania, po prostu użyj rank()
lub dense_rank()
zamiast row_number()
.