Това може да бъде радикално по-просто :
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
-
Вашата дублирана заявка има всички колони. Няма нужда да
JOINотново към основната таблица. -
Използвайте Postgres разширението на стандартния SQL
DISTINCT:DISTINCT ON: -
Postgres има правилен булев тип. Можете да
ORDER BYбулев израз директно. Последователността еFALSE(0),TRUE(1),NULL(НУЛА). Ако a е NULL, този израз еFALSEи първо сортира:(a IS NOT NULL). Останалите са подредени поid. Ето. -
Избор на
IDстава автоматично. Според вашето описание искате ID на реда, избран в тази заявка. Няма какво повече да правя. -
Вероятно можете да интегрирате това директно във вашата дублирана заявка.