SQL Server查找可用时间槽

时间:2018-01-03 16:32:37

标签: sql sql-server

我是SQL的新手,我正在尝试根据附加的示例数据集找出如何获得可用的约会时段。它的日期部分可以忽略,只有时间才重要。

提前谢谢你。

Current Data Set

需要帮助编写SQL查询以提供实际可用的插槽:

Result the query should return

示例数据:

list=[44359, 16610,  8364, ...,     1,     1,     1]

1 个答案:

答案 0 :(得分:1)

首先,您应该研究规范化数据的想法,并将不同的实体(插槽,约会等)存储在不同的表中。

所以你需要做的是找到一个插槽列表。

 SELECT ScheduleTimesId,ScheduleId,FacilityId, ApptTypeId, SlotTimeStart, SlotTimeStop, ApptType 
 FROM #MyData 

以及已经作出的约会列表

SELECT ApptTimeStart, ApptTimeStop 
FROM #MyData 
WHERE ApptTimeStart is not null

从那里,你需要找到哪些插槽没有任何约会;所以你从老虎机到约会进行左连接,看看老虎机时间与约会时间相交的地方,那里没有约会。

;with slots as 
    (SELECT ScheduleTimesId,ScheduleId,FacilityId, ApptTypeId, SlotTimeStart, SlotTimeStop, ApptType FROM #MyData ),
appts as 
     (SELECT ApptTimeStart, ApptTimeStop FROM #MyData where ApptTimeStart is not null)
select * from slots
left join appts 
         on slots.SlotTimeStart>=appts.ApptTimeStart 
         and slots.SlotTimeStop<=appts.ApptTimeStop
where appts.ApptTimeStart is null