To může být radikálně jednodušší :
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
-
Váš duplicitní dotaz obsahuje všechny sloupce. Není třeba se
JOINznovu k základnímu stolu. -
Použijte Postgres rozšíření standardního SQL
DISTINCT:DISTINCT ON: -
Postgres má správný booleovský typ. Můžete
ORDER BYpřímo booleovský výraz. Sekvence jeFALSE(0),TRUE(1),NULL(NULA). Je-li a NULL, je tento výrazFALSEa seřadí jako první:(a IS NOT NULL). Zbytek je seřazen podleid. Voilá. -
Výběr
IDse děje automaticky. Podle vašeho popisu chcete v tomto dotazu vybrat ID řádku. Není co dělat. -
Pravděpodobně to můžete přímo integrovat do duplicitního dotazu.