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

Gibt eine Zeile mit dem maximalen Wert einer Spalte pro Gruppe zurück

Dies ist auch ohne Unterabfrage möglich:

SELECT DISTINCT
       id
      ,max(round) OVER (PARTITION BY id) AS round
      ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM   SCORES
WHERE  id IN (1,2,3)
ORDER  BY id;

Gibt genau das zurück, wonach Sie gefragt haben.
Der entscheidende Punkt ist, dass DISTINCT wird nach angewendet Fensterfunktionen.

SQL-Geige.

Vielleicht schneller, weil es zweimal dasselbe Fenster verwendet:

SELECT DISTINCT
       id
      ,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) AS round
      ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM   SCORES
WHERE  id IN (1,2,3)
ORDER  BY id;

Ansonsten dasselbe tun.