Detta kan vara radikalt enklare :
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 dubblettfråga har alla kolumner. Inget behov av att
JOIN
till basbordet igen. -
Använd Postgres-tillägget av standard SQL
DISTINCT
:DISTINCT ON
: -
Postgres har en ordentlig boolesk typ. Du kan
ORDER BY
booleskt uttryck direkt. Sekvensen ärFALSE
(0),TRUE
(1),NULL
(NULL). Om a är NULL är detta uttryckFALSE
och sorterar först:(a IS NOT NULL)
. Resten sorteras efterid
. Voilá. -
Val av
ID
sker automatiskt. Enligt din beskrivning vill du ha ID för raden som väljs i denna fråga. Inget mer att göra. -
Du kan förmodligen integrera detta i din dubblettfråga direkt.