PostgreSQLテーブルを日付/時刻フィールドで昇順に並べ替える必要があります。 last_updated
。
しかし、そのフィールドは空またはnullにすることができ、last_updated
comeにnullを含むレコードが必要ですbefore non-null last_updated
。
これは可能ですか?
order by last_updated asc /* and null last_updated records first ?? */
Postgresは、 NULLS FIRST | LAST
のキーワードを提供し、ORDER BY
句にそのニーズに正確に応えます。
... ORDER BY last_updated NULLS FIRST
typicalユースケースは降順のソート順(DESC
)であり、デフォルトの昇順(ASC
)の完全な反転(最初にnull値を使用)。多くの場合、望ましくありません-そのため、null値を最後に保持するには:
... ORDER BY last_updated DESC NULLS LAST
indexでクエリをサポートするには、一致させます:
CREATE INDEX foo_idx ON tbl (last_updated DESC NULLS LAST);
Postgresはbtreeインデックスを逆方向に読み取ることができますが、NULL値が追加される場所は重要です。
CASEステートメントを使用して、カスタムORDER BYを作成できます。
CASEステートメントは条件をチェックし、その条件に一致する行に、条件に一致しない行に割り当てられる値よりも低い値を割り当てます。
例を挙げれば理解しやすいでしょう:
SELECT last_updated
FROM your_table
ORDER BY CASE WHEN last_updated IS NULL THEN 0 ELSE 1 END,
last_updated ASC;