Obtener valor basado en el máximo de una columna diferente agrupada por otra columna [duplicado]
Quiero obtener los valores de una columna según el máximo de una columna diferente agrupada por otra columna.
Tengo esta tabla:
KEY NUM VAL
A 1 AB
B 1 CD
B 2 EF
C 2 GH
C 3 HI
D 1 JK
D 3 LM
Y quiero este resultado:
KEY VAL
A AB
B EF
C HI
D LM
De hecho, podría usar esta consulta para obtenerlo.
select KEY, VAL
from TABLE_NAME TN
where NUM = (
select max(NUM)
from TABLE_NAME TMP
where TMP.KEY = TN.KEY
)
Sin embargo, ¿existe una forma más elegante en ORACLE SQL (10g o superior) de obtener el resultado?
La razón detrás de esto es que en realidad hay varios KEY
mensajes de correo electrónico y se ve un poco feo.
Puedes 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" probablemente sea una cuestión de gustos.
Debo señalar que esto es sutilmente diferente de su consulta. Se garantiza que esto devolverá una fila para cada uno key
; el tuyo podría devolver varias filas. Si desea ese comportamiento, simplemente use rank()
o dense_rank()
en lugar de row_number()
.