2012-04-25 98 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说,它可能更容易获得的一天,房间里的数据,并解决了这个应用程序代码。