sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL-aggregat eller fönsterfunktion för att returnera bara det sista värdet

DISTINCT plus fönsterfunktion

Lägg till 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);

Mer om DISTINCT :

Enklare och snabbare med DISTINCT ON

PostgreSQL har även denna utvidgning av 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;

Mer om DISTINCT ON och möjligen snabbare alternativ:

Enkelt fodral med vanligt aggregat

Om ditt fall är faktiskt lika enkelt som din demo (och du behöver inte ytterligare kolumner från den sista raden), en vanlig aggregatfunktion blir enklare:

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


  1. mySql Dynamic Pivot Query med över 3000 kolumner

  2. SQL FLOAT:3 poäng som hjälper dig att undvika konstiga matematiska fel

  3. Mysql Codeigniter Active Record - Hur gör jag en where_in-fråga och returnerar rätt resultatordning?

  4. PL/SQL ORA-01422:exakt hämtning returnerar fler än begärt antal rader