使用sql查找时隙

使用sql查找时隙,sql,sql-server,sql-server-2008,datetime,Sql,Sql Server,Sql Server 2008,Datetime,我有一个场景(SQL 2008),我需要从下表中找到占用的时间段/非间隔。例如。我已经创建了这个虚拟表 CREATE TABLE Job ( JobID INT NOT NULL, WorkerID INT NOT NULL, JobStart DATETIME NOT NULL, JobEnd DATETIME NOT NULL ); INSERT INTO Job (JobID, WorkerID, JobStart, JobEnd) VALUES (1, 25, '2

我有一个场景(SQL 2008),我需要从下表中找到占用的时间段/非间隔。例如。我已经创建了这个虚拟表

CREATE TABLE Job
(
JobID INT NOT NULL,
  WorkerID INT NOT NULL,
  JobStart DATETIME NOT NULL,
  JobEnd DATETIME NOT NULL
);

INSERT INTO Job (JobID, WorkerID, JobStart, JobEnd)
    VALUES (1, 25, '2012-11-17 16:00', '2012-11-17 17:00'),
        (2, 25, '2012-11-17 16:00', '2012-11-17 16:50'),
        (3, 25, '2012-11-19 18:00', '2012-11-19 18:30'),
        (4, 25, '2012-11-19 17:30', '2012-11-19 18:10'),
        (5, 26, '2012-11-18 16:00', '2012-11-18 17:10'),
        (6, 26, '2012-11-18 16:00', '2012-11-19 16:50');
因此,qry shd返回如下数据:

WorkerID | StartDate | EndDate
25      2012-11-17 16:00   2012-11-17 17:00
25      2012-11-17 17:30   2012-11-17 18:30
26      2012-11-18 16:00    2012-11-18 17:10
我能够得到结果,但我使用while循环,这是一种非常迭代的方法。如果有机会,我可以避免使用while来获得结果

这是个问题。伊齐克·本·甘(Itzik Ben Gan)发表了一篇文章,为这个问题提供了许多解决方案。使用伊兹克的一个解决方案,这里有一个查询来解决您的问题:

结果

WorkerId    StartDate               EndDate
----------- ----------------------- -----------------------
25          2012-11-17 16:00:00.000 2012-11-17 17:00:00.000
25          2012-11-19 17:30:00.000 2012-11-19 18:30:00.000
26          2012-11-18 16:00:00.000 2012-11-19 16:50:00.000
这是一个问题。伊齐克·本·甘(Itzik Ben Gan)发表了一篇文章,为这个问题提供了许多解决方案。使用伊兹克的一个解决方案,这里有一个查询来解决您的问题:

结果

WorkerId    StartDate               EndDate
----------- ----------------------- -----------------------
25          2012-11-17 16:00:00.000 2012-11-17 17:00:00.000
25          2012-11-19 17:30:00.000 2012-11-19 18:30:00.000
26          2012-11-18 16:00:00.000 2012-11-19 16:50:00.000

有很多类似的问题,所以…..
EndDate
对于
WorkerId
=26应该是
2012-11-19 16:50
?是的@wewewesthemenace,这是一个打字错误:(对于工人id 26,应该是2012-11-19 16:50,所以有很多类似的问题,…对于
WorkerId
=26,应该
2012-11-19 16:50
?是的@wewewesthemennace,这是一个打字错误:(对于工人id 26,时间应该是2012-11-19 16:50我还有一个场景..你也能帮我吗..我有一个包含作业开始时间和作业结束时间的表格..还有另一个包含用户条目的表格..还有Shiftstarttime和Shiftendtime等列。这也将输入未来日期..同时我添加了一个新记录rd对于用户,我必须检查所需的开始时间和结束时间是否与他的条目以及作业开始时间+结束时间冲突…我已经准备好了查询,但我使用了while循环,我认为该循环的wrt性能不好..欢迎任何想法..@XanderKage,我建议您提出一个新问题,以便吸引更多用户来自用户的更多关注。我还有一个场景。你也能帮我吗?我有一个包含作业开始时间和作业结束时间的表。还有一个保存用户条目的表。这还有Shiftstarttime、Shiftendtime和其他列。这也将输入未来日期。当我为用户添加新记录时,我将必须检查所需的开始和结束时间是否与他的条目以及工作开始时间+结束时间冲突…我已经准备好了查询,但我使用了while循环,我认为它的wrt性能不好..欢迎任何想法..@XanderKage,我建议你问一个新问题,以便吸引更多的注意力来自用户。