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
JOINtil basisbordet igen. -
Brug Postgres-udvidelsen af standard SQL
DISTINCT:DISTINCT ON: -
Postgres har en ordentlig boolesk type. Du kan
ORDER BYboolesk udtryk direkte. Sekvensen erFALSE(0),TRUE(1),NULL(NUL). Hvis a er NULL, er dette udtrykFALSEog sorterer først:(a IS NOT NULL). Resten er sorteret efterid. Voilá. -
Valg af
IDsker 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.