>declare @ProcessRows table (ProcessDate Date, ProcessName varchar(50)) > >insert into @ProcessRows values ('10/1/2017', 'Process A') >insert into @ProcessRows values ('10/2/2017', 'Process A') >insert into @ProcessRows values ('10/3/2017', 'Process A') > >insert into @ProcessRows values ('10/4/2017', 'Process B') >insert into @ProcessRows values ('10/5/2017', 'Process B') >insert into @ProcessRows values ('10/6/2017', 'Process B') >insert into @ProcessRows values ('10/7/2017', 'Process B') > >insert into @ProcessRows values ('10/8/2017', 'Process C') > >insert into @ProcessRows values ('10/9/2017', 'Process A') >insert into @ProcessRows values ('10/10/2017', 'Process A') >insert into @ProcessRows values ('10/11/2017', 'Process A') > >insert into @ProcessRows values ('10/12/2017', 'Process D') >insert into @ProcessRows values ('10/13/2017', 'Process D') > >insert into @ProcessRows values ('10/14/2017', 'Process A') >insert into @ProcessRows values ('10/15/2017', 'Process A') > >insert into @ProcessRows values ('10/16/2017', 'Process D') >>
;with GapsAndIslands as (select *, row_number() over (order by ProcessDate) - ROW_NUMBER() over (partition by ProcessName order by ProcessDate) as Grp from @ProcessRows) select min(ProcessDate) as StartDate, max(ProcessDate) as EndDate, count(*) as NumRows, ProcessName from GapsAndIslands Group by ProcessName, Grp order by StartDate;You may want to also check https://www.red-gate.com/simple-talk/sql/t-sql-programming/the-sql-of-gaps-and-islands-in-sequences/