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
JOIN
znovu 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 BY
přímo booleovský výraz. Sekvence jeFALSE
(0),TRUE
(1),NULL
(NULA). Je-li a NULL, je tento výrazFALSE
a seřadí jako první:(a IS NOT NULL)
. Zbytek je seřazen podleid
. Voilá. -
Výběr
ID
se 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.