By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table tblOKDryerDowntime (
StartDowntime datetime,
EndDowntime datetime,
ElapsedSecs int,
Dryer int default 0,
DowntimeCode int default 0
);
insert into tblOKDryerDowntime
(StartDowntime, EndDowntime, ElapsedSecs) values
('2022-01-17 08:00', '2022-01-17 09:05', 3900);
1 rows affected
;WITH RCTE AS (
SELECT
StartDowntime AS DownDatetime
, 600 AS ElapsedSeconds
, ElapsedSecs AS RemainingSeconds
, EndDowntime
, 1 AS Lvl
FROM tblOKDryerDowntime
UNION ALL
SELECT
DATEADD(second, ElapsedSeconds, DownDatetime)
, iif(RemainingSeconds > ElapsedSeconds, 600, RemainingSeconds)
, iif(RemainingSeconds > ElapsedSeconds, RemainingSeconds - ElapsedSeconds, 0)
, EndDowntime
, Lvl + 1
FROM RCTE
WHERE DownDatetime < EndDowntime
AND RemainingSeconds > 0
)
SELECT DownDatetime, ElapsedSeconds
FROM RCTE
ORDER BY DownDatetime;
DownDatetime | ElapsedSeconds |
---|---|
2022-01-17 08:00:00.000 | 600 |
2022-01-17 08:10:00.000 | 600 |
2022-01-17 08:20:00.000 | 600 |
2022-01-17 08:30:00.000 | 600 |
2022-01-17 08:40:00.000 | 600 |
2022-01-17 08:50:00.000 | 600 |
2022-01-17 09:00:00.000 | 600 |
2022-01-17 09:10:00.000 | 300 |