seems like this is what you're looking for:-CREATE TABLE #Table(Customer int,[Service] int,StartDate datetime,EndDate datetime) INSERT #TableSELECT 1, 1, '20000101' ,'20010101' UNION ALLSELECT 1, 2, '20010102', '20091210' UNION ALLSELECT 1, 3, '20100101', '20100201' UNION ALLSELECT 2, 1, '20000101', '20030101' UNION ALLSELECT 2, 2, '20051001', '20091231' UNION ALLSELECT 2, 3, '20090101', '20090430' UNION ALLSELECT 3, 1, '20050101', '20060101' UNION ALLSELECT 3, 2, '20061001', '20091231' UNION ALLSELECT 3, 3, '20090101', '20100310' UNION ALLSELECT 4, 1, '20050101', '20061201' UNION ALLSELECT 4, 2, '20061001', '20071231' UNION ALLSELECT 4, 3, '20080101', '20090210' UNION ALLSELECT 4, 4, '20080501', '20090101' UNION ALLSELECT 4, 5, '20081001', '20091231' UNION ALLSELECT 4, 6, '20090101', '20090310' UNION ALLSELECT 4, 7, '20100101', '20100125' UNION ALLSELECT 4, 8, '20100120', '20100130' UNION ALLSELECT 4, 9, '20100112', '20100310';With CTE AS(SELECT t.Customer,CASE WHEN t1.MinDate IS NOT NULL AND t1.MinDate<t.Startdate THEN t1.MinDate ELSE t.StartDate END AS StartDate,CASE WHEN t1.MaxDate IS NOT NULL AND t1.MaxDate>t.Enddate THEN t1.MaxDate ELSE t.EndDate END AS EndDate,DENSE_RANK() OVER (PARTITION BY Customer ORDER BY CASE WHEN t1.MinDate IS NOT NULL AND t1.MinDate<t.Startdate THEN t1.MinDate ELSE t.StartDate END, CASE WHEN t1.MaxDate IS NOT NULL AND t1.MaxDate>t.Enddate THEN t1.MaxDate ELSE t.EndDate END) AS OverlappedFROM #TAble tOUTER APPLY (SELECT MIN(StartDate) AS MinDate,MAX(EndDate) AS MaxDate,COUNT(*) AS cnt FROM #TAble WHERE Customer=t.Customer AND [Service] <> t.[Service] AND (t.EndDate BETWEEN StartDate AND EndDate OR t.StartDate BETWEEN StartDate AND EndDate) )t1 )SELECT c1.Customer,StartDate,EndDateFROM CTE c1INNER JOIN (SELECT Customer,MAX(Overlapped) AS MaxOverlap FROM CTE GROUP BY Customer)c2ON c2.Customer=c1.CustomerAND c2.MaxOverlap=c1.OverlappedGROUP BY c1.Customer,StartDate,EndDateDROP TABLE #Tableoutput--------------------------------------entered data Customer Service StartDate EndDate1 1 2000-01-01 00:00:00.000 2001-01-01 00:00:00.0001 2 2001-01-02 00:00:00.000 2009-12-10 00:00:00.0001 3 2010-01-01 00:00:00.000 2010-02-01 00:00:00.0002 1 2000-01-01 00:00:00.000 2003-01-01 00:00:00.0002 2 2005-10-01 00:00:00.000 2009-12-31 00:00:00.0002 3 2009-01-01 00:00:00.000 2009-04-30 00:00:00.0003 1 2005-01-01 00:00:00.000 2006-01-01 00:00:00.0003 2 2006-10-01 00:00:00.000 2009-12-31 00:00:00.0003 3 2009-01-01 00:00:00.000 2010-03-10 00:00:00.0004 1 2005-01-01 00:00:00.000 2006-12-01 00:00:00.0004 2 2006-10-01 00:00:00.000 2007-12-31 00:00:00.0004 3 2008-01-01 00:00:00.000 2009-02-10 00:00:00.0004 4 2008-05-01 00:00:00.000 2009-01-01 00:00:00.0004 5 2008-10-01 00:00:00.000 2009-12-31 00:00:00.0004 6 2009-01-01 00:00:00.000 2009-03-10 00:00:00.0004 7 2010-01-01 00:00:00.000 2010-01-25 00:00:00.0004 8 2010-01-20 00:00:00.000 2010-01-30 00:00:00.0004 9 2010-01-12 00:00:00.000 2010-03-10 00:00:00.000output dataCustomer StartDate EndDate1 2010-01-01 00:00:00.000 2010-02-01 00:00:00.0002 2005-10-01 00:00:00.000 2009-12-31 00:00:00.0003 2006-10-01 00:00:00.000 2010-03-10 00:00:00.0004 2010-01-01 00:00:00.000 2010-03-10 00:00:00.000
------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/