Postgresql
Postgres 按多列排序
所以想像我有一個看起來像這樣的結果集:
+----+------------+------------+ | Id | Date_One | Date_Two | +----+------------+------------+ | 1 | 2022-05-12 | null | | 2 | 2022-05-13 | 2022-05-11 | | 3 | null | 2022-05-14 | +----+------------+------------+
我想先根據最早日期排序結果,而不考慮列。每行將有一個
Date_One
或Date_Two
填充。它們永遠都不會為空。所以上述結果集的結果將是:
+----+------------+------------+ | Id | Date_One | Date_Two | +----+------------+------------+ | 2 | 2022-05-13 | 2022-05-11 | | 1 | 2022-05-12 | null | | 3 | null | 2022-05-14 | +----+------------+------------+
(因為 Id 2
Date_Two
早於 Id 1 的Date_One
)。我不確定如何創建我的
ORDER BY
子句。我幼稚的解決方案是使用COALESCE
,但在我的範例中這不適用於 ID 2。
只需使用
order by least(date_one, date_two)
該
least
函式返回兩個值中的最小值,巧合的是,您可以使用它greatest(date_one, date_two)
來獲取最大值。這也適用於null
,但是如果兩個值null
顯然都是這些函式中的任何一個,null
因為沒有什麼可比較的,所以這些函式中的任何一個都將返回。請記住,使用
least
orgreatest
也會使您為訂購這 2 列而創建的任何索引不可用,除非您使用least/greatest
. 儘管我不確定在您的情況下這是最好的舉措。