Oracle
 sql >> Database >  >> RDS >> Oracle

Ritorna riga con il valore massimo di una colonna per gruppo

Questo è possibile anche senza subquery:

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;

Restituisce esattamente ciò che hai chiesto.
Il punto cruciale è che DISTINCT viene applicato dopo funzioni della finestra.

SQL Violino.

Forse più veloce perché usa la stessa finestra due volte:

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;

Altrimenti facendo lo stesso.