2011-01-31 69 views
1

我有一個棘手的SQL問題。我正在處理可發送或預定的帖子。下面是結構:使用不同的日期字段進行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
  • scheduled_at的P3,P4和P5

通過不同的屬性下令所有帖子我試過的訂單狀況的不同變化但我無法爲所有情況獲得任何幫助。我希望這一切都有道理。如果沒有,我可以提供更多細節。

回答

2

嘗試使用COALESCE:

select * from foo 
order by coalesce(created_at, scheduled_at) 
2

在P1和P2中scheduled_atNULL所以這是唯一的情況下應由created_at定購。
所以,你可以使用:
ORDER BY CASE WHEN scheduled_at IS NULL THEN created_at ELSE scheduled_at END

+0

我現在 – marcgg 2011-01-31 11:30:06

+0

嘗試這種權利這似乎並不奏效。你真的可以使用CASE與MySQL? – marcgg 2011-01-31 11:31:59

相關問題