Oracle
 sql >> Base de données >  >> RDS >> Oracle

Renvoie une ligne avec la valeur maximale d'une colonne par groupe

Ceci est également possible sans sous-requête :

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;

Renvoie exactement ce que vous avez demandé.
Le point crucial est que DISTINCT est appliqué après fonctions de fenêtre.

Violon SQL.

Peut-être plus rapide car il utilise deux fois la même fenêtre :

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;

Sinon faire la même chose.