Sql查询时间范围

时间:2014-01-10 06:43:43

标签: sql-server-2008 tsql

我有一个包含许多申请人的简单表格,其中包含他们的开始时间,结束时间和日期数据。我想找出时间范围内特定日期的可用者。

下表显示了开始日期和结束日期列告诉我们他们在该日期/时间预订的位置.........

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日的表格中没有时间段,因为它不适用于表格。

2 个答案:

答案 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'
)