Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Linha de retorno com o valor máximo de uma coluna por grupo


Isso também é possível sem 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;

Retorna exatamente o que você pediu.
O ponto crucial é que DISTINCT é aplicado depois funções da janela.

violino SQL.

Talvez mais rápido porque usa a mesma janela duas vezes:
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;

Caso contrário, fazendo o mesmo.