Mysql 时间约束查询

Mysql 时间约束查询,mysql,sql,Mysql,Sql,我有下表: id | roomid | courseid | day(NUM)|开始(时间)|结束(时间) 这是我一直坚持的larget查询的一部分。我如何显示在特定日期在特定房间的课程之间没有时间休息的所有id?有点困在这里了。 我想我必须使用'ADDTIME()'函数来找出课程1结束时间和课程2开始时间=>中0的差异。我已经看了很长一段时间了,我被卡住了 如果您感兴趣的只是充分利用。 如果一天是7小时(9-5-1小时的午休时间),称之为420分钟,让事情变得简单。 那么420-Sum(MIN

我有下表:

id | roomid | courseid | day(NUM)|开始(时间)|结束(时间)

这是我一直坚持的larget查询的一部分。我如何显示在特定日期在特定房间的课程之间没有时间休息的所有id?有点困在这里了。
我想我必须使用'ADDTIME()'函数来找出课程1结束时间和课程2开始时间=>中0的差异。我已经看了很长一段时间了,我被卡住了

如果您感兴趣的只是充分利用。 如果一天是7小时(9-5-1小时的午休时间),称之为420分钟,让事情变得简单。
那么420-Sum(MINUTE(TIMEDIFF(t2,t1))=0就意味着房间已经全部订满了。

也许玩一下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
看看有没有能满足你的需要


但正如eggyal所说,获取当天和房间的数据并在应用程序代码中解决这一问题可能更容易。

您是否在问如何使用SQL检索所有
roomid
,其中表中的条目在某个给定的
日期的00:00到23:59之间总计?如果是,我想您会发现这一点MySQL很难告诉您这一点;您可能希望检索当天的所有房间预订,然后用其他语言扫描它们,以确定哪一个(如果有的话)跨越一整天。您的假设非常正确。您可以创建一个视图,按
开始(时间)排序
,然后在该视图中选择
ID
s,其中
ID的
start
#x是大于
ID的
end
#(x-1)的某个值。我说“某个值”,因为您可以指定什么构成“时断”。(也许5分钟是不够的,因为在这段时间内安排一些事情是不值得的)