我有一个棘手的SQL问题。我正在处理可以发送或安排的帖子。结构如下:
----------------
- Posts -
----------------
- id -
- sent_at -
- scheduled_at -
- created_at -
----------------
可能的数据示例:
P1: {scheduled_at: NULL, sent_at: NULL, created_at: T}
P2: {scheduled_at: NULL, sent_at: T, created_at: T}
P3: {scheduled_at: T, sent_at: T, created_at: T}
P4: {scheduled_at: T+n, sent_at: NULL, created_at: T}
P5: {scheduled_at: T+n, sent_at: T+n, created_at: T}
我想做什么:
我希望根据具体情况获取根据不同属性排序的所有帖子
created_at
代表P1和P2 scheduled_at
我尝试了ORDER条件的不同变体,但我无法为所有情况工作。我希望这一切都有道理。如果没有,我可以提供更多细节。
答案 0 :(得分:2)
在P1和P2中scheduled_at
是NULL
所以这是唯一应由created_at
排序的情况。
所以你可以使用:
ORDER BY CASE WHEN scheduled_at IS NULL THEN created_at ELSE scheduled_at END
答案 1 :(得分:2)
尝试使用coalesce:
select * from foo
order by coalesce(created_at, scheduled_at)