sql >> Database >  >> RDS >> Oracle

Retourrij met de maximale waarde van één kolom per groep

Dit is ook mogelijk zonder 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;

Geeft precies terug waar je om vroeg.
Het cruciale punt is dat DISTINCT wordt toegepast na vensterfuncties.

SQL Fiddle.

Misschien sneller omdat het hetzelfde venster twee keer gebruikt:

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;

Anders hetzelfde doen.



  1. Hoe te bestellen op twee kolommen in SQL?

  2. Hoe de telling van de huidige maand zondagen in psql te krijgen?

  3. Datum gebruiken in een controlebeperking, Oracle

  4. Slaapstand configureren om Oracle's SYS_GUID() voor primaire sleutel te gebruiken