【问题标题】:Query to find a block of time in a schedule查询以查找时间表中的时间块
【发布时间】:2014-06-13 09:35:41
【问题描述】:

假设我有一个从上午 9 点到下午 6 点的工作时间表。它分为 15 分钟的块,约会(以 15 分钟为增量)可以适应可用的时间。

现在,如果我需要插入一个时长为 45 分钟的新约会,是否有一个简单的查询可以找到可用于给定日期的约会的时间段

基本的表格设计是

AppointmentId
Date
StartTime
Length - 15 minute incremenents

我想获得一个可供选择的时间列表,所以如果给定日期的唯一约会是 9:30 的 30 分钟约会,那么时间列表将是

(No times before 9:30 as the 45 minute appointment wont fit)
10:15
10:30
10:45
...
5:15pm (last time of the day the appointment will fit)

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    通过使用排名函数(即Row_Number())为每天的每一行设置编号(假设它的名称是rn),然后通过这个条件q2.rn = q1.rn-1加入这个查询然后你有@987654324约会的@在下一个约会的start旁边,然后在这个endstart上计算datediff(mi),所以这个值就是gap,然后写另一个查询包装这个查询来过滤有gap >= yourNeededTime的记录.此外,对于一天的开始和结束,您可以创建 2 个虚拟记录,一个用于上午 9 点,一个用于下午 6 点,这样您就可以处理一天开始到第一次约会和最后一次约会到一天结束的间隔。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2021-12-27
      • 2017-12-26
      • 1970-01-01
      相关资源
      最近更新 更多