with TestData as (select PassM, cast(EnterDt as datetime) EnterDtfrom(values ('Boo K K','5/1/2012 11:55:00 PM'), ('Boo K K','5/2/2012 11:30:00 PM'), ('Boo K K','5/4/2012 10:30:00 AM'), ('LIAW S','4/30/2012 11:48:52 PM'), ('LIAW S','5/1/2012 00:11:07 AM'), ('LIAW S','5/1/2012 11:59:07 AM'), ('LIAW S','5/1/2012 4:42:02 AM'), ('LIAW S','5/2/2012 1:10:09 AM'), ('LIAW S','5/2/2012 1:43:06 AM'), ('LIAW S','5/4/2012 2:17:47 AM'))dt(PassM, EnterDt)), GrpDates as (select PassM, EnterDt, GrpDate = dateadd(dd, dense_rank() over (partition by PassM order by dateadd(dd,datediff(dd,0,EnterDt),0)) * -1, dateadd(dd,datediff(dd,0,EnterDt),0))from TestData)select PassM, EnterDt, ConsecutiveD = dense_rank() over (partition by PassM, GrpDate order by dateadd(dd,datediff(dd,0,EnterDt),0)), FirstEntry = min(EnterDt) over (partition by PassM, GrpDate)from GrpDatesorder by PassM, EnterDt;
create table #TestData ( -- create temp table for the test data PassM varchar(32), EnterDt datetime);goinsert into #TestDataselect PassM, cast(EnterDt as datetime) EnterDtfrom(values ('Boo K K','5/1/2012 11:55:00 PM'), ('Boo K K','5/2/2012 11:30:00 PM'), ('Boo K K','5/4/2012 10:30:00 AM'), ('LIAW S','4/30/2012 11:48:52 PM'), ('LIAW S','5/1/2012 00:11:07 AM'), ('LIAW S','5/1/2012 11:59:07 AM'), ('LIAW S','5/1/2012 4:42:02 AM'), ('LIAW S','5/2/2012 1:10:09 AM'), ('LIAW S','5/2/2012 1:43:06 AM'), ('LIAW S','5/4/2012 2:17:47 AM'))dt(PassM, EnterDt)gowith GrpDates as (select PassM, EnterDt, GrpDate = dateadd(dd, dense_rank() over (partition by PassM order by dateadd(dd,datediff(dd,0,EnterDt),0)) * -1, dateadd(dd,datediff(dd,0,EnterDt),0))from #TestData)select PassM, EnterDt, ConsecutiveD = dense_rank() over (partition by PassM, GrpDate order by dateadd(dd,datediff(dd,0,EnterDt),0)), FirstEntry = min(EnterDt) over (partition by PassM, GrpDate)from GrpDatesorder by PassM, EnterDt;godrop table #TestData; -- cleanup after running code, drop the temp tablego