o1.pk <> o2.pkby
o1.pk<o2.pk, if you are returning the same overlap twice. And if you do you also need to check if a "lap" falls completely within the other "lap".
create table #Overlaps ( >>>PK int identity >>>,employeePK int >>>,StartDate Date >>>,Enddate Date) >>> >>>insert into #Overlaps >>>(employeePK, StartDate, EndDate) >>>VALUES (1, '2013-01-01', '2016-08-31') -- this overlaps with the next row >>>,(1, '2014-08-01', '2014-08-31') -- this overlaps with previous as both start date '2014-08-01' is greater than '2013-01-01' and less than '2016-08-31' and end date '2014-08-31' is greater than '2013-01-01' and less than '2016-08-31' >>>,(1, '2016-09-01', '2017-08-31') -- no overlap here >>>,(2, '2014-01-01', '2014-05-31') -- this overlaps with the next row >>>,(2, '2014-03-01', '2014-12-31') -- this overlaps with the previous row >>> >>>select * from #Overlaps >>> >>>drop table #Overlaps>>>
select o1pk = o1.pk >>> ,o1Emp = o1.employeepk >>> ,o1Start = o1.startdate >>> ,o1End = o1.Enddate >>> ,o2pk = o2.pk >>> ,o2emp = o2.employeepk >>> ,o2Start = o2.Startdate >>> ,o2End = o2.Enddate >>>from #Overlaps o1 >>> inner join #Overlaps o2 on o1.employeepk = o2.employeepk >>> and (o1.startdate between o2.startdate and o2.enddate or o1.enddate between o2.startdate and o2.Enddate) >>> and o1.pk <> o2.pk