sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL-aggregat eller vinduesfunktion for kun at returnere den sidste værdi

DISTINCT plus vinduesfunktion

Tilføj en DISTINCT klausul:

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

Mere om DISTINCT :

Enklere og hurtigere med DISTINCT ON

PostgreSQL har også denne udvidelse af SQL-standarden:

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;

Mere om DISTINCT ON og muligvis hurtigere alternativer:

Simpelt etui med almindeligt aggregat

Hvis din sag er faktisk lige så enkel som din demo (og du behøver ikke yderligere kolonner fra den sidste række), en almindelig aggregeret funktion vil være enklere:

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


  1. Liste de forespørgsler, der kører på SQL Server

  2. Hvad er nogle måder at få adgang til Microsoft SQL Server fra Linux?

  3. Konverter streng/varchar til dato mellem MySQL-tabeller

  4. Er et RID-opslag hurtigere end et nøgleopslag?