使用不同的日期字段排序

时间:2011-01-31 11:10:14

标签: mysql sql sql-order-by

我有一个棘手的SQL问题。我正在处理可以发送或安排的帖子。结构如下:

----------------
- Posts        -
----------------
- id           -
- sent_at      -
- scheduled_at -
- created_at   -
----------------
  • 可以在不安排的情况下发送帖子。
  • 预定的帖子将在scheduled_at日期发送。此时,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
  • P3,P4和P5
  • scheduled_at

我尝试了ORDER条件的不同变体,但我无法为所有情况工作。我希望这一切都有道理。如果没有,我可以提供更多细节。

2 个答案:

答案 0 :(得分:2)

在P1和P2中scheduled_atNULL所以这是唯一应由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)