请考虑下表:
ID From To
1 07.06.2015 07.06.2015
2 03.01.2016 19.01.2016
3 05.01.2016 20.01.2016
4 19.01.2016 24.01.2016
5 20.01.2016 24.01.2016
6 24.01.2016 24.01.2016
7 11.03.2016 27.03.2016
我该如何只选择 a)没有重叠记录的行或 b)一系列重叠记录的第一行?
对于上面的示例,我想保留记录1和7(它们没有重叠)以及2和5(3和4重叠2,而6个重叠5):
ID From To
1 07.06.2015 07.06.2015
2 03.01.2016 19.01.2016
5 20.01.2016 24.01.2016
7 11.03.2016 27.03.2016
PS:我在Netezza上,所以不能进行递归查询。
答案 0 :(得分:0)
您可以使用not exists
:
select t.*
from t
where not exists (select 1
from t t2
where t2.from < t.from and t2.to > t.from
);
注意:这假设from
日期是不同的。如果可以重复,则:
select t.*
from t
where not exists (select 1
from t t2
where t2.from <= t.from and
t2.id < t.id and
t2.to > t.from
);