Esto puede ser radicalmente más simple :
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
-
Su consulta duplicada tiene todas las columnas. No es necesario
JOINa la tabla base de nuevo. -
Use la extensión Postgres del SQL estándar
DISTINCT:DISTINCT ON: -
Postgres tiene un tipo booleano adecuado. Puedes
ORDER BYexpresión booleana directamente. La secuencia esFALSE(0),TRUE(1),NULL(NULO). Si a es NULL, esta expresión esFALSEy ordena primero:(a IS NOT NULL). El resto está ordenado porid. Voilá. -
Selección de
IDocurre automáticamente. De acuerdo con su descripción, desea el ID de la fila seleccionada en esta consulta. Nada más que hacer. -
Probablemente pueda integrar esto en su consulta duplicada directamente.