Puoi avvicinarti a questo usando 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;
Se lo consideri più "elegante" è probabilmente una questione di gusti.
Vorrei sottolineare che questo è leggermente diverso dalla tua domanda. Questo è garantito per restituire una riga per ogni key
; il tuo potrebbe restituire più righe. Se vuoi quel comportamento, usa semplicemente rank()
o dense_rank()
invece di row_number()
.