重叠时间

时间:2014-12-16 14:46:19

标签: sql sql-server datetime overlap

我有一张这样的表:

Id, TimeStart, TimeFinished

我需要找到TimeStart之前开始的TimeFinished,但Id更高,这意味着重叠时间。

Id  TimeStart   TimeFinished
1   2014-01-01  2014-01-02
2   2014-01-02  2014-01-03
3   2014-01-02  2014-01-04

这可以在第3行找到。第2行是TimeStart < TimeFinished。 (或者找到第3行中TimeFinished > TimeStart的第2行)

2 个答案:

答案 0 :(得分:1)

尝试左外连接:

SELECT t1.*
FROM   table t1
       LEFT JOIN table t2
              ON t1.Id > t2.Id
                 AND t1.TimeStart < t2.TimeFinished
WHERE  t2.Id IS NOT NULL 

答案 1 :(得分:1)

如果您只想要第一条记录中的信息,请使用exists

select t.*
from table t
where exists (select 1
              from table t2
              where t.id > t2.id and t.TimeStart > t2.TimeFinish
             );