我需要按“A 列的更新,回退到 B 列”对 postgres 表进行排序
如果我的表格如下所示:id
、reminder_at
、updated_at
1, 01-11-2019, 12-01-2018
2, null, 01-04-2019
3, null, 01-02-2019
4, 01-01-2019, 01-04-2019
预期的排序输出将是
4, 01-01-2019, 01-04-2019 # 01-01-2019 is soonest
3, null, 01-02-2019 # then 01-02-2019
2, null, 01-04-2019 # then 01-04-2019
1, 01-11-2019, 12-01-2018 # then 01-11-2019
我目前正在用应用程序代码来做这件事,我更喜欢用 SQL 来做
例如,如果记录 1 的 reminder_at 变为 NULL,那么它会立即转到顶部,因为 updated_at
日期是最早的
目前:
SELECT *
FROM "tasks"
WHERE completed_at IS NULL
ORDER by reminder_at, updated_at
编辑正确答案:
SELECT *
FROM "tasks"
WHERE completed_at IS NULL
ORDER by COALESCE(reminder_at, updated_at)
最佳答案
使用合并。它选择第一个非空值。
select * from tab
order by coalesce(col1, col2)
如果相反,您想使用 2 个日期中的较大者.. 然后使用 greatest()
select * from tab
order by greatest(col1, col2)
关于ruby-on-rails - PostgreSQL 按两个日期中最旧的日期排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54152773/