SELECT StaffId,MIN(EntryDate) AS firstDateEntrySequence, MAX(EntryDate) AS lastDateEntrySequence,DATEDIFF(dd,MIN(EntryDate),MAX(EntryDate))+1 AS NumberOfDaysInSequenceFROM (SELECT StaffId, EntryDate, DATEADD(dd, - ROW_NUMBER() OVER (PARTITION BY StaffId ORDER BY EntryDate), EntryDate) FROM #yourSampleData GROUP BY StaffId, EntryDate) a(StaffId, EntryDate, EntryGroup)GROUP BY StaffId, EntryGroup;
IF object_id('tempdb..#yourSampleData') IS NOT NULLBEGIN DROP TABLE #yourSampleData;END;SELECT StaffId, EntryDateINTO #yourSampleDataFROM (VALUES(1, '2012-12-12'),(1, '2012-12-13'),(1, '2012-12-15'), (2, '2012-12-12'),(2, '2012-12-14'),(2, '2012-12-16') )a(StaffId, EntryDate);
SELECT StaffId, EntryDateINTO #yourSampleDataFROM (SELECT 1, '2012-12-12' UNION ALL SELECT 1, '2012-12-13' UNION ALL SELECT 1, '2012-12-15' UNION ALL SELECT 2, '2012-12-12' UNION ALL SELECT 2, '2012-12-14' UNION ALL SELECT 2, '2012-12-16' )a(StaffId, EntryDate);
with TestData as (select PassM, cast(EnterDt as datetime) EnterDt, ConsecutiveDfrom(values ('Boo K K','5/1/2012 11:55:00 PM', 1), ('Boo K K','5/2/2012 11:30:00 PM', 2), ('Boo K K','5/4/2012 10:30:00 AM', 1), ('LIAW S','4/30/2012 11:48:52 PM', 1), ('LIAW S','5/1/2012 00:11:07 AM', 2), ('LIAW S','5/1/2012 11:59:07 AM', 2), ('LIAW S','5/1/2012 4:42:02 AM', 2), ('LIAW S','5/2/2012 1:10:09 AM', 3), ('LIAW S','5/2/2012 1:43:06 AM', 3), ('LIAW S','5/4/2012 2:17:47 AM', 1))dt(PassM, EnterDt, ConsecutiveD)), UniqueDts as (select distinct PassM, dateadd(dd,datediff(dd,0,EnterDt),0) UniqEnterDt from TestData), GrpDates as (select PassM, UniqEnterDt, GrpDate = dateadd(dd,row_number() over (partition by PassM order by UniqEnterDt) *-1,UniqEnterDt), rn = row_number() over (partition by PassM order by UniqEnterDt)from UniqueDts),ConsecutiveDts as (select PassM, UniqEnterDt, rn = row_number() over (partition by PassM, GrpDate order by UniqEnterDt)from GrpDates)select td.PassM, td.EnterDt, cd.rn as CompConsecutiveD, td.ConsecutiveDfrom TestData td inner join ConsecutiveDts cd on (td.PassM = cd.PassM and dateadd(dd,datediff(dd,0,td.EnterDt),0) = cd.UniqEnterDt);