Ini bisa sangat sederhana :
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
-
Kueri duplikat Anda memiliki semua kolom. Tidak perlu
JOIN
ke tabel dasar lagi. -
Gunakan ekstensi Postgres dari SQL standar
DISTINCT
:DISTINCT ON
: -
Postgres memiliki tipe boolean yang tepat. Anda dapat
ORDER BY
ekspresi boolean secara langsung. Urutannya adalahFALSE
(0),TRUE
(1),NULL
(BATAL). Jika a adalah NULL, ekspresi ini adalahFALSE
dan urutkan terlebih dahulu:(a IS NOT NULL)
. Sisanya diurutkan berdasarkanid
. Voila. -
Pemilihan
ID
terjadi secara otomatis. Menurut deskripsi Anda, Anda ingin ID dari baris yang dipilih dalam kueri ini. Tidak ada lagi yang bisa dilakukan. -
Anda mungkin dapat mengintegrasikan ini ke dalam kueri duplikat Anda secara langsung.