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
JOINke tabel dasar lagi. -
Gunakan ekstensi Postgres dari SQL standar
DISTINCT:DISTINCT ON: -
Postgres memiliki tipe boolean yang tepat. Anda dapat
ORDER BYekspresi boolean secara langsung. Urutannya adalahFALSE(0),TRUE(1),NULL(BATAL). Jika a adalah NULL, ekspresi ini adalahFALSEdan urutkan terlebih dahulu:(a IS NOT NULL). Sisanya diurutkan berdasarkanid. Voila. -
Pemilihan
IDterjadi 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.