sql >> Databasteknik >  >> RDS >> Oracle

Returnera rad med maxvärdet för en kolumn per grupp

Detta är också möjligt utan underfråga:

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;

Returnerar exakt det du bad om.
Det avgörande är att DISTINCT tillämpas efter fönsterfunktioner.

SQL Fiddle.

Kanske snabbare eftersom det använder samma fönster två gånger:

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;

Annars gör du detsamma.



  1. Hur vet man vilken partition som kommer att användas i Postgres hashpartitionering?

  2. java.lang.NoSuchFieldError:NONE i viloläge med Spring 3, maven, JPA, c3p0

  3. Returnera en DML-utlösartyp på en tabell i SQL Server

  4. Bygg snabbt ett PHP CRUD-gränssnitt med PDO Advanced CRUD Generator Tool