Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Holen Sie sich den Wert basierend auf dem Maximum einer anderen Spalte, gruppiert nach einer anderen Spalte

Dies erreichen Sie mit 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;

Ob man das als "eleganter" empfindet, ist wohl Geschmackssache.

Ich sollte darauf hinweisen, dass sich dies geringfügig von Ihrer Anfrage unterscheidet. Dies gibt garantiert eine Zeile für jeden key zurück; Ihre könnte mehrere Zeilen zurückgeben. Wenn Sie dieses Verhalten wünschen, verwenden Sie einfach rank() oder dense_rank() statt row_number() .