sql >> Base de Datos >  >> RDS >> Oracle

Obtener valor basado en el máximo de una columna diferente agrupada por otra columna

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() .