我是SQL的新手,我正在尝试根据附加的示例数据集找出如何获得可用的约会时段。它的日期部分可以忽略,只有时间才重要。
提前谢谢你。
需要帮助编写SQL查询以提供实际可用的插槽:
Result the query should return
示例数据:
list=[44359, 16610, 8364, ..., 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