查找开始日期早于前一个结束日期的所有行

aka*_*ter 5 sql t-sql sql-server sql-server-2012

有没有办法根据用户撤回所有具有重叠日期时间的记录?

例如;

TableA具有以下行;

TrainerID            StartTime            EndTime
1234                 10-1-2015 08:30      10-1-2015 09:00 
1234                 10-1-2015 08:45      10-1-2015 09:15
1234                 10-1-2015 09:30      10-1-2015 10:00
2345                 10-1-2015 08:45      10-1-2015 09:15
2345                 10-1-2015 09:30      10-1-2015 10:00
Run Code Online (Sandbox Code Playgroud)

我需要一个只能提取以下记录的查询,因为它的开始时间是在培训师的上一个结束时间之前(双重预订):

1234                 10-1-2015 08:45      10-1-2015 09:15
Run Code Online (Sandbox Code Playgroud)

小智 2

下面的 EXIST 代码应该可以给你答案。该代码确保冲突条目的开始时间在主列表条目的开始时间之前,而冲突的开始时间仍然在邮件列表条目的开始时间之后。

SELECT * 
FROM tblTest clashing
WHERE EXISTS 
(
    SELECT 1
    FROM tblTest mainlist
    WHERE clashing.trainderid = mainlist.trainderid 
        AND clashing.starttime < mainlist.endtime
        AND clashing.starttime > mainlist.starttime
)
Run Code Online (Sandbox Code Playgroud)

也可以用 IN 语句来写,但是 EXIST 效率更高