2012-05-23 32 views
1

標題可能相當神祕,但這是我的問題。跨天2天的SQL順序

我有一天的事件表(行程)。每個條目(例如訪問博物館)都有slot_start和slot_end時間列。這是24小時格式,例如13:00:00 - 15:00:00。

我想通過slot_start asc訂購這些,但我可以通過slot_start 00:00:00即可獲得「前往酒吧/俱樂部」的條目。午夜會首先下訂單,這將是正確的順序,但因爲這實際上是一個新的一天,我希望它在博物館後。

這些沒有特定的日期。他們只受到時間段的限制,被認爲是一天的事件。

有沒有人有這種設置的經驗?或者任何人都可以提出一種設置每個「事件」的時間的不同方式?我想我可能會引入一些元素哪天它是在1天,2天的方面...用

+0

什麼DBMS? SQL是一種語言。 –

+0

是的,我知道,使用MySQL – iamjonesy

回答

0

如此「00:00 :00「是指博物館之後,以及他們是否在00:01:00進入俱樂部?或00:01:00?

您需要在桌面上使用「日期」來控制該日期。

一個非常「醜陋」的解決問題的方法是這樣的:

第一選擇「限價」考慮記錄總是「老」,可以說,凌晨3點所以每次記錄前3會後,被視爲「 「一切。然後做:

select * 
from your_table 
where slot_start > '03:00:00' 
order by slot_start 

union 

select * 
from your_table 
where slot_start < '03:00:00' and slot_start > '00:00:00' 
order by slot_start 

但是,這不是一個好的解決方案。理想情況下,您需要在您的桌面上使用「日」控件

+0

'ORDER BY(slot_start NOT BETWEEN'00:00:01'和'02:59:59')DESC,slot_start ASC'會比使用'union'更容易嗎? –

0

我個人使用start_unix和持續時間。

  • start_unix是當事件開始
  • 持續時間UNIX_TIMESTAMP僅僅是時間
  • end_unix =(start_unix +持續時間)

這是一個簡單的方法來實現的,這些問題完全控制。

對你來說,一個罪惡的解決方案可能是設置這些時間誰通過午夜爲例如25:00:00(01:00:00),當你顯示他們時,你做了SELECT MOD(slot_start, 24) AS slot_start_modORDER BY slot_start

0

這裏是一個想法,你可以從實際的Slot_start時間減去1分鐘只是爲了排序(但建議在表中使用日期列)。

Select * from Table order by dateadd(minute,-1,TIME) 

DATEADD函數添加(-1)分鐘時間只列命令他們