Puede abordar esto 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;
Si lo consideras más "elegante" es probablemente una cuestión de gustos.
Debo señalar que esto es sutilmente diferente de su consulta. Esto está garantizado para devolver una fila para cada key
; el tuyo podría devolver varias filas. Si desea ese comportamiento, simplemente use rank()
o dense_rank()
en lugar de row_number()
.