Rob*_*son 3 postgresql query order-by
想象一下我有一个看起来像这样的结果集:
+----+------------+------------+
| Id | Date_One | Date_Two |
+----+------------+------------+
| 1 | 2022-05-12 | null |
| 2 | 2022-05-13 | 2022-05-11 |
| 3 | null | 2022-05-14 |
+----+------------+------------+
Run Code Online (Sandbox Code Playgroud)
我想首先根据最早的日期对结果进行排序,而不考虑列。每行将有一个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 |
+----+------------+------------+
Run Code Online (Sandbox Code Playgroud)
(因为 Id 2Date_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或greatest还会使您为排序这两列而创建的任何索引都无法使用,除非您使用 来将其创建为不可变函数的索引least/greatest。尽管我不确定这是否是您场景中的最佳举措。