sql >> Base de Datos >  >> RDS >> Oracle

Fila de retorno con el valor máximo de una columna por grupo

Esto también es posible sin subconsulta:

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;

Devuelve exactamente lo que solicitó.
El punto crucial es que DISTINCT se aplica después funciones de ventana.

Violín SQL.

Quizás más rápido porque usa la misma ventana dos veces:

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;

De lo contrario haciendo lo mismo.