ORDER BY 子句中的 CASE 按最低值 2 列對記錄進行排序
想象一下,你需要按兩列中任何一列的最低值排序記錄。有些資料庫可以使用非聚合的 MIN()
或 LEAST()
函式(... ORDER BY MIN(Date1, Date2)
),但在標準 SQL 中,你必須使用 CASE
表示式。
下面查詢中的 CASE
表示式檢視 Date1
和 Date2
列,檢查哪個列具有較低值,並根據此值對記錄進行排序。
樣本資料
ID |
日期 1 | DATE2 |
---|---|---|
1 |
2017 年 1 月 1 日 | 2017 年 1 月 31 日 |
2 |
2017 年 1 月 31 日 | 2017 年 1 月 3 日 |
3 |
2017 年 1 月 31 日 | 2017 年 1 月 2 日 |
4 |
2017 年 1 月 6 日 | 2017 年 1 月 31 日 |
五 | 2017 年 1 月 31 日 | 2017 年 1 月 5 日 |
6 |
2017 年 1 月 4 日 | 2017 年 1 月 31 日 |
詢問
SELECT Id, Date1, Date2
FROM YourTable
ORDER BY CASE
WHEN COALESCE(Date1, '1753-01-01') < COALESCE(Date2, '1753-01-01') THEN Date1
ELSE Date2
END
結果
ID |
日期 1 | DATE2 |
---|---|---|
1 |
2017 年 1 月 1 日 | 2017 年 1 月 31 日 |
3 |
2017 年 1 月 31 日 | 2017 年 1 月 2 日 |
2 |
2017 年 1 月 31 日 | 2017 年 1 月 3 日 |
6 |
2017 年 1 月 4 日 | 2017 年 1 月 31 日 |
五 | 2017 年 1 月 31 日 | 2017 年 1 月 5 日 |
4 |
2017 年 1 月 6 日 | 2017 年 1 月 31 日 |
說明
正如你看到 Id = 1
的行是第一個,因為 Date1
從整個表 2017-01-01
有最低記錄,Id = 3
是第二行,因為 Date2
等於 2017-01-02
是表中的第二低值,依此類推。
所以我們已經從 2017-01-01
到 2017-01-06
升序排序記錄,並且不關心哪一列 Date1
或 Date2
是那些值。