sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-aggregatie- of vensterfunctie om alleen de laatste waarde te retourneren

DISTINCT plus vensterfunctie

Voeg een DISTINCT toe clausule:

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);

Meer over DISTINCT :

Eenvoudiger en sneller met DISTINCT ON

PostgreSQL heeft ook deze uitbreiding van de SQL-standaard:

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;

Meer over DISTINCT ON en mogelijk snellere alternatieven:

Eenvoudige behuizing met gewoon aggregaat

Als uw geval is eigenlijk net zo eenvoudig als uw demo (en u hebt geen extra kolommen uit die laatste rij nodig), een eenvoudige aggregatiefunctie zal eenvoudiger zijn:

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


  1. Mysql-kruispunt op basis van één veld

  2. Wat is de aanbevolen batchgrootte voor SqlBulkCopy?

  3. PostreSQL 10 start niet op Ubuntu 18.04 op het Windows-subsysteem voor Linux

  4. Postgres-tijd met gelijkheid van tijdzone