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
JOINdi nuovo al tavolo di base. -
Usa l'estensione Postgres dello standard SQL
DISTINCT:DISTINCT ON: -
Postgres ha un tipo booleano appropriato. Puoi
ORDER BYdirettamente l'espressione booleana. La sequenza èFALSE(0),TRUE(1),NULL(NULLO). Se a è NULL, questa espressione èFALSEe ordina prima:(a IS NOT NULL). Il resto è ordinato perid. Voilà. -
Selezione di
IDavviene 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.