Questo può essere radicalmente più semplice :
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
-
La tua query duplicata ha tutte le colonne. Non c'è bisogno di
JOIN
di nuovo al tavolo di base. -
Usa l'estensione Postgres dello standard SQL
DISTINCT
:DISTINCT ON
: -
Postgres ha un tipo booleano appropriato. Puoi
ORDER BY
direttamente l'espressione booleana. La sequenza èFALSE
(0),TRUE
(1),NULL
(NULLO). Se a è NULL, questa espressione èFALSE
e ordina prima:(a IS NOT NULL)
. Il resto è ordinato perid
. Voilà. -
Selezione di
ID
avviene automaticamente. In base alla tua descrizione desideri l'ID della riga selezionata in questa query. Niente più da fare. -
Probabilmente puoi integrarlo direttamente nella tua query duplicata.