Dette kan være radikalt enklere :
SELECT DISTINCT ON (b, c, e, f)
b, c, e, f, id -- add more columns freely
FROM (<duplicate query here>) sub
ORDER BY b, c, e, f, (a IS NOT NULL), id
-
Din dubletforespørgsel har alle kolonner. Ingen grund til at
JOIN
til basisbordet igen. -
Brug Postgres-udvidelsen af standard SQL
DISTINCT
:DISTINCT ON
: -
Postgres har en ordentlig boolesk type. Du kan
ORDER BY
boolesk udtryk direkte. Sekvensen erFALSE
(0),TRUE
(1),NULL
(NUL). Hvis a er NULL, er dette udtrykFALSE
og sorterer først:(a IS NOT NULL)
. Resten er sorteret efterid
. Voilá. -
Valg af
ID
sker automatisk. I henhold til din beskrivelse vil du have id'et for rækken valgt i denne forespørgsel. Ikke mere at gøre. -
Du kan sandsynligvis integrere dette direkte i din dubletforespørgsel.