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
JOIN
do tabeli podstawowej. -
Użyj rozszerzenia Postgres standardowego SQL
DISTINCT
:DISTINCT ON
: -
Postgres ma odpowiedni typ logiczny. Możesz
ORDER BY
wyrażenie logiczne bezpośrednio. Sekwencja toFALSE
(0),TRUE
(1),NULL
(ZERO). Jeśli a ma wartość NULL, to wyrażenie toFALSE
i sortuje najpierw:(a IS NOT NULL)
. Reszta jest uporządkowana wedługid
. Voila. -
Wybór
ID
dzieje 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.