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
所以,如果我选择非重叠对象,结果应为:
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
答案 0 :(得分:2)
解释
T1.StartTime <= T2.EndTime ...
T1.item = T2.item
T1.StartTime <> T2.StartTime and T1.EndTime <> T2.EndTime
T2.item IS NULL
<强> SqlFiddle Demo 强>
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 |