Сортировка по разным полям даты - PullRequest
1 голос
/ 31 января 2011

У меня каверзный вопрос по SQL.Я работаю с сообщениями, которые могут быть отправлены или запланированы.Вот структура:

----------------
- Posts        -
----------------
- id           -
- sent_at      -
- scheduled_at -
- created_at   -
----------------
  • Сообщение может быть отправлено без запланированного.
  • Запланированное сообщение будет отправлено в запланированную дату.На этом этапе дата sent_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 для P3, P4 и P5

Я пробовал разныеварианты условий ЗАКАЗА, но я не могу заставить что-либо работать во всех случаях.Я надеюсь, что все это имеет смысл.Я могу предоставить более подробную информацию, если это не так.

Ответы [ 2 ]

2 голосов
/ 31 января 2011

Попробуйте использовать coalesce:

select * from foo
order by coalesce(created_at, scheduled_at)
2 голосов
/ 31 января 2011

В P1 и P2 scheduled_at равно NULL, так что это единственный случай, который должен быть заказан created_at.Таким образом, вы можете использовать:ORDER BY CASE WHEN scheduled_at IS NULL THEN created_at ELSE scheduled_at END

...