これは根本的に簡単になります :
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
する必要はありません 再びベーステーブルに移動します。 -
標準SQLのPostgres拡張機能を使用する
DISTINCT
:DISTINCT ON
: -
Postgresには適切なブール型があります。
ORDER BY
できます ブール式を直接。シーケンスはFALSE
(0)、TRUE
(1)、NULL
(ヌル)。 aがNULLの場合、この式はFALSE
です。 最初に並べ替えます:(a IS NOT NULL)
。残りはid
で並べ替えられます 。 Voilá。 -
ID
の選択 自動的に発生します。説明によると、このクエリで選択された行のIDが必要です。これ以上することはありません。 -
おそらく、これを重複クエリに直接統合できます。