By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table t (name varchar(10), date_from date, date_to date);
insert into t (name, date_from, date_to) values
('A', '2022-01-03', '2022-01-03'),
('A', '2021-12-29', '2021-12-31'),
('A', '2021-12-28', '2021-12-28'),
('A', '2021-12-27', '2021-12-27'),
('A', '2021-12-23', '2021-12-24'),
('A', '2021-11-08', '2021-11-09');
6 rows affected
select name, min(date_from) as date_from, max(date_to) as date_to
from (
select *, sum(inc) over(partition by name order by date_to) as grp
from (
select *,
case when lag(ext_to) over(partition by name order by date_to) = date_from
then 0 else 1 end as inc
from (
select *,
case when (datepart(weekday, date_to) = 6)
then dateadd(day, 3, date_to)
else dateadd(day, 1, date_to) end as ext_to
from t
) x
) y
) z
group by name, grp
order by name, grp
name | date_from | date_to |
---|---|---|
A | 2021-11-08 | 2021-11-09 |
A | 2021-12-23 | 2022-01-03 |