一尘不染

如何在PostgreSQL中按距now()的距离排序(未来优先)

sql

我有一个date字段,显示为从今天起的天数。因此2055-01-011950-01-01将分别显示为正数和负数。现在,我希望对它们进行排序,以便非负数首先以升序排列,然后负数以降序排列。例如:

0
1
2
3
4
-1
-2
-3

阅读 149

收藏
2021-03-08

共1个答案

一尘不染

以下内容也可以工作:

 ORDER BY expiry < CURRENT_DATE, abs(expiry - CURRENT_DATE)

但是,此表单不会使用索引来按所需顺序生成行。如果您的查询将从中受益(从表中选择大多数行或使用限制),则需要使用并集:

SELECT ... WHERE ... AND expiry >= CURRENT_DATE ORDER BY expiry
    UNION ALL
SELECT ... WHERE ... AND expiry < CURRENT_DATE ORDER BY expiry DESC
2021-03-08