我有一个包含许多申请人的简单表格,其中包含他们的开始时间,结束时间和日期数据。我想找出时间范围内特定日期的可用者。
下表显示了开始日期和结束日期列告诉我们他们在该日期/时间预订的位置.........
AppID StartTime EndTime Date
H12 8:00 13:00 12/1/2013
H12 14:00 16:00 12/1/2013
H12 19:00 21:00 12/1/2013
H14 17:00 18:00 12/1/2013
H13 14:00 16:00 12/1/2013
H13 11:00 15:00 12/2/2013
H15 8:00 13:00 12/2/2013
因此,在上面的表格中,我如何编写一个查询,说明...给我2013年12月1日的所有应用程序 NOT 在17:00 - 18:00之间工作?所以基本上它应该返回H12& H13(因为2013年12月1日的表格中没有时间段,因为它不适用于表格。
答案 0 :(得分:1)
此查询返回在特定日期的某个时间范围内无效的应用ID。
SELECT
[AppID] = FreeApps
FROM table_name t1
WHERE AppID NOT IN (-- Not in the set of apps that were busy at the time range
SELECT AppID
FROM table_name t2
WHERE ((StartTime >= '17:00' AND StartTime <= '18:00')
OR (EndTime >= '17:00' AND EndTime <= '18:00'))
AND Date = '12/1/2013'
AND t1.AppID=t2.AppID)
GROUP BY AppID
答案 1 :(得分:1)
;WITH t1 as
(
SELECT DISTINCT AppID
FROM <table>
WHERE date = '20130112'
)
SELECT AppID
FROM t1
WHERE
NOT EXISTS
(SELECT * FROM <table> t2
WHERE t2.STARTTIME < '18:00'
AND t2.ENDTIME > '17:00'
AND t1.AppID = t2.AppID
AND t2.date = '20130112'
)