sql >> Databáze >  >> RDS >> Oracle

Vrátit řádek s maximální hodnotou jednoho sloupce na skupinu

To je také možné bez poddotazu:

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;

Vrátí přesně to, co jste požadovali.
Klíčovým bodem je, že DISTINCT se použije po funkce okna.

SQL Fiddle.

Možná rychlejší, protože používá stejné okno dvakrát:

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;

Jinak udělejte totéž.



  1. Funkce MIN() v PostgreSQL

  2. Ekvivalent unpivot() v PostgreSQL

  3. Android-setPeriodic for JobScheduler nebude fungovat

  4. Oracle 11g na Mac OS X