add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE #t (PackedStr VARCHAR(100), Ident INT, BeginDate DATE, EndDate DATE);
INSERT #t
VALUES ('A,B,C,D,E', 86, '2019-03-18', '2019-03-27')
, ('A,B,C,D,E', 87, '2019-03-28', '2019-04-09')
, ('A,B,C,D,E,F,G', 88, '2019-04-10', '2019-04-15')
, ('A,B,C,D,E', 89, '2019-04-16', '2019-04-24')
, ('A,B,C,D,E', 90, '2019-04-25', '2019-05-14');

SELECT *
, ROW_NUMBER() OVER (PARTITION BY [PackedStr] ORDER BY [Ident]) RowNumber
, MIN( BeginDate ) OVER (PARTITION BY [PackedStr] ORDER BY [Ident]) FirstDate
, MAX( EndDate ) OVER (PARTITION BY [PackedStr] ORDER BY [Ident] DESC) LastDate
FROM [#t]
ORDER BY [Ident];

PackedStr Ident BeginDate EndDate RowNumber FirstDate LastDate
A,B,C,D,E 86 2019-03-18 2019-03-27 1 2019-03-18 2019-05-14
A,B,C,D,E 87 2019-03-28 2019-04-09 2 2019-03-18 2019-05-14
A,B,C,D,E,F,G 88 2019-04-10 2019-04-15 1 2019-04-10 2019-04-15
A,B,C,D,E 89 2019-04-16 2019-04-24 3 2019-03-18 2019-05-14
A,B,C,D,E 90 2019-04-25 2019-05-14 4 2019-03-18 2019-05-14
select *
,row_number()over(partition by gapN order by Ident) rn
,MIN( BeginDate ) OVER (PARTITION BY gapN) FirstDate
,MAX( EndDate ) OVER (PARTITION BY gapN) LastDate
from(
select * ,sum(isGap)over(order by Ident)gapN
from(
select *
,case when PackedStr=lag(PackedStr)over(order by Ident) then 0 else 1 end as isGap
from #t
)a
)b
PackedStr Ident BeginDate EndDate isGap gapN rn FirstDate LastDate
A,B,C,D,E 86 2019-03-18 2019-03-27 1 1 1 2019-03-18 2019-04-09
A,B,C,D,E 87 2019-03-28 2019-04-09 0 1 2 2019-03-18 2019-04-09
A,B,C,D,E,F,G 88 2019-04-10 2019-04-15 1 2 1 2019-04-10 2019-04-15
A,B,C,D,E 89 2019-04-16 2019-04-24 1 3 1 2019-04-16 2019-05-14
A,B,C,D,E 90 2019-04-25 2019-05-14 0 3 2 2019-04-16 2019-05-14