Sql 选择没有重叠时间的每个项目

Sql 选择没有重叠时间的每个项目,sql,overlap,Sql,Overlap,所以,如果我选择非重叠对象,结果应该是: Item | StartTime | EndTime 1 | 2015-08-15 03:00:00 | 2015-08-17 12:00:00 1 | 2015-08-15 07:00:00 | 2015-08-17 18:00:00 1 | 2015-08-18 03:00:00 | 2015-08-20 12:00:00 2 | 2015-

所以,如果我选择非重叠对象,结果应该是:

Item    |   StartTime           |   EndTime
1       |   2015-08-15 03:00:00 |   2015-08-17 12:00:00
1       |   2015-08-15 07:00:00 |   2015-08-17 18:00:00
1       |   2015-08-18 03:00:00 |   2015-08-20 12:00:00
2       |   2015-08-15 03:00:00 |   2015-08-17 12:00:00
2       |   2015-08-15 07:00:00 |   2015-08-17 18:00:00
2       |   2015-08-19 04:00:00 |   2015-08-20 12:00:00
说明


  • 首先尝试找到两个范围重叠
    T1的匹配。开始时间8-18到8-20与8-19到8-20重叠。我搞糊涂了。@James一个是
    item1
    另一个是
    item2
    请在RDBMS中加上一个标签。您不可编辑。Tks
    1       |   2015-08-18 03:00:00 |   2015-08-20 12:00:00
    2       |   2015-08-19 04:00:00 |   2015-08-20 12:00:00
    
     SELECT T1.*
     FROM YourTable T1
     LEFT JOIN YourTable T2
       ON (T1.StartTime <= T2.EndTime)  and  (T1.EndTime >= T2.StartTime)
      and T1.item = T2.item
      and T1.StartTime <> T2.StartTime
      and T1.EndTime <> T2.EndTime
     WHERE 
         T2.item IS NULL
    
    | Item |                StartTime |                  EndTime |
    |------|--------------------------|--------------------------|
    |    1 | August, 18 2015 03:00:00 | August, 20 2015 12:00:00 |
    |    2 | August, 19 2015 04:00:00 | August, 20 2015 12:00:00 |