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;