A Microsoft extension to the ANSI SQL language that includes procedural programming, local variables, and various support functions.
;with mySource as (SELECT '1' AS ID, '1/1/2020' AS START_DT, '1/31/2020' AS END_DT
UNION ALL
SELECT '1' AS ID, '1/31/2020' AS START_DT, '4/30/2020' AS END_DT
UNION ALL
SELECT '1' AS ID, '6/1/2020' AS START_DT, NULL AS END_DT
UNION ALL
SELECT '2' AS ID, '1/1/2020' AS START_DT, '1/31/2020' AS END_DT
UNION ALL
SELECT '2' AS ID, '2/1/2020' AS START_DT, '4/30/2020' AS END_DT
UNION ALL
SELECT '2' AS ID, '6/1/2020' AS START_DT, NULL AS END_DT
UNION ALL
SELECT '3' AS ID, '1/1/2020' AS START_DT, '1/31/2020' AS END_DT
UNION ALL
SELECT '3' AS ID, '2/4/2020' AS START_DT, '4/30/2020' AS END_DT
UNION ALL
SELECT '3' AS ID, '6/1/2020' AS START_DT, NULL AS END_DT)
, mycte AS
(
SELECT *
, CASE
WHEN DATEDIFF(day, LAG(end_dt) OVER (PARTITION BY ID ORDER BY start_dt), start_dt) <= 3 THEN 0
ELSE 1
END AS [flag]
FROM mySource
),
mycte1 AS
(
SELECT *, SUM([flag]) OVER (PARTITION BY ID ORDER BY start_dt) AS grp
FROM mycte
)
SELECT ID, MIN(start_dt) AS start_dt, MAX(end_dt) AS end_dt
FROM mycte1
GROUP BY ID, grp
Order by ID, start_dt