sql >> Databáze >  >> RDS >> PostgreSQL

Agregát PostgreSQL nebo funkce okna pro vrácení pouze poslední hodnoty

DISTINCT plus funkce okna

Přidejte DISTINCT klauzule:

SELECT DISTINCT a
     , last_value(b) OVER (PARTITION BY a ORDER BY b
                           RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM  (
   VALUES
     (1, 'do not want this')
    ,(1, 'just want this')
   ) sub(a, b);

Další informace o DISTINCT :

Jednodušší a rychlejší s DISTINCT ON

PostgreSQL má také toto rozšíření standardu SQL:

SELECT DISTINCT ON (a)
       a, b
FROM  (
   VALUES
     (1, 'do not want this')
   , (1, 'just want this')
   ) sub(a, b)
ORDER  BY a, b DESC;

Další informace o DISTINCT ON a možná rychlejší alternativy:

Jednoduchý případ s prostým agregátem

Pokud váš případ je ve skutečnosti stejně jednoduchý jako vaše ukázka (a nepotřebujete další sloupce z posledního řádku), jednoduchá agregační funkce bude jednodušší:

SELECT a, max(b)
FROM  (
   VALUES
     (1, 'do not want this')
   , (1, 'just want this')
   ) sub(a, b)
GROUP  BY a;


  1. MYSQL - Vytvořte jeden SQL dotaz z více dotazů

  2. Chyba s auto_increment při připojení k Postgres přes psql a putTTY

  3. Jak implementovat můj příkaz SQL v Laravelu?

  4. php &mysql - procházet sloupce jednoho řádku a předávat hodnoty do pole