2012-04-25 97 views
1

我有下表:時間限制查詢

id | roomid | courseid |日(NUM)|開始(TIME)|結束(TIME)

這是我堅持使用的larget查詢的一部分。如何顯示特定日期的特定房間課程之間沒有時間間隔的所有ID?有點卡在這裏。 我想我必須使用'ADDTIME()'函數來找出在course1結束時間和課程2開始時間=>有0的差異。我已經看了很長一段時間了,我卡住了!

+1

你是問如何能夠找回,使用SQL,所有'roomid'都有條目在你的表中,從某個給定的'day'開始,從00:00到23:59合計跨度?如果是這樣,我想你會發現這不是MySQL很容易告訴你的;您可能需要檢索當天的所有客房預訂,然後用其他語言掃描它們以確定哪一天(如果有的話)跨越整個一天。 – eggyal 2012-04-25 16:58:42

+1

你的假設非常正確。你可以通過'start(TIME)'命令創建一個視圖,然後在該視圖中選擇'ID',其中'ID'#x的開始值大於'ID'# X-1)。我說「有些價值」,因爲你可以指定什麼構成「時間中斷」。 (也許5分鐘是不夠的,因爲它不值得能夠在該時間框架中安排某些事情) – rownage 2012-04-25 17:21:38

回答

2

如果你所有感興趣的是充分利用。 如果一天是7小時,(9-5 - 1小時午餐休息時間),請撥打420分鐘讓事情變得簡單。 然後420 - 總和(MINUTE(TIMEDIFF(T2,T1))= 0意味着房間被訂滿了

1

的CTE也許玩弄可以幫助你那裏開始嘗試用這樣的

WITH RU_CTE AS (
    SELECT your_fields 
     FROM RoomUtilization 
    WHERE day = @DayParameter 
     AND start = @startTimeParameter 
    UNION ALL 
    SELECT your_fields 
     FROM RoomUtilization RU 
    WHERE day = RU_CTE.day 
     AND start = RU_CTE.end 
) 
SELECT * 
    FROM RU_CTE 

,看看一些twiches滿足您的需求

但作爲eggyal說,它可能更容易獲得的一天,房間裏的數據,並解決了這個應用程序代碼。