To może być radykalnie prostsze :
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
-
Twoje zduplikowane zapytanie zawiera wszystkie kolumny. Nie ma potrzeby
JOINdo tabeli podstawowej. -
Użyj rozszerzenia Postgres standardowego SQL
DISTINCT:DISTINCT ON: -
Postgres ma odpowiedni typ logiczny. Możesz
ORDER BYwyrażenie logiczne bezpośrednio. Sekwencja toFALSE(0),TRUE(1),NULL(ZERO). Jeśli a ma wartość NULL, to wyrażenie toFALSEi sortuje najpierw:(a IS NOT NULL). Reszta jest uporządkowana wedługid. Voila. -
Wybór
IDdzieje się automatycznie. Zgodnie z Twoim opisem chcesz, aby identyfikator wiersza wybranego w tym zapytaniu. Nic więcej do zrobienia. -
Prawdopodobnie możesz zintegrować to bezpośrednio ze zduplikowanym zapytaniem.