查询以查找计划中的时间块

时间:2014-04-28 00:51:45

标签: sql sql-server tsql

想象一下,从上午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)

1 个答案:

答案 0 :(得分:1)

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

我希望这会有所帮助