我需要按“列A的最新版本,后退到列B”对postgres表进行排序
如果我的表格是这样的:css-loader
,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
我目前正在使用应用程序代码来执行此操作,并且我更喜欢使用SQL
例如,如果对于记录1,inherert_at变为NULL,则它会立即到达顶部,因为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
日期是最早的
当前:
updated_at
编辑并给出正确答案:
SELECT *
FROM "tasks"
WHERE completed_at IS NULL
ORDER by reminder_at, updated_at
答案 0 :(得分:2)
使用合并。它选择第一个非null值。
select * from tab
order by coalesce(col1, col2)
如果相反,您想使用2个日期中的较大者。然后使用great()
select * from tab
order by greatest(col1, col2)
答案 1 :(得分:0)
我将您的数据格式解释为mm-dd。应该在输出中翻转3和2,第二个在第四个之后?
以下工作吗?
从测试顺序中选择id,reminder_at,updated_at,greatest(coalesce(reminder_at,'1/1/1900'),coalesce(updated_at,'1/1/1900'))作为测试列,按最大(coalesce(reminder_at, '1/1/1900'),coalesce(updated_at,'1/1/1900'));