Você pode abordar isso 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 você considera isso mais "elegante" é provavelmente uma questão de gosto.
Devo salientar que isso é sutilmente diferente da sua consulta. Isso garante o retorno de uma linha para cada
key
; o seu pode retornar várias linhas. Se você quiser esse comportamento, basta usar rank()
ou dense_rank()
em vez de row_number()
.