Это может сработать? Если время начала / окончания задачи находится вне времени начала / окончания окна, разница будет отрицательной. Есть несколько сценариев:
select TestDates.*,
DATEDIFF(minute,
CASE WHEN TestDates.WindowStart > TestDates.TaskStart
THEN TestDates.WindowStart ELSE TestDates.TaskStart END,
CASE WHEN TestDates.WindowEnd < TestDates.TaskEnd
THEN TestDates.WindowEnd ELSE TestDates.TaskEnd END
) as Interval
from
(
SELECT GETDATE() as WindowStart,
dateadd(minute, 10, GETDATE()) as WindowEnd,
dateadd(minute, 2, GETDATE()) as TaskStart,
dateadd(minute, 14, GETDATE()) as TaskEnd
) as TestDates
select TestDates.*,
DATEDIFF(minute,
CASE WHEN TestDates.WindowStart > TestDates.TaskStart
THEN TestDates.WindowStart ELSE TestDates.TaskStart END,
CASE WHEN TestDates.WindowEnd < TestDates.TaskEnd
THEN TestDates.WindowEnd ELSE TestDates.TaskEnd END
) as Interval
from
(
SELECT GETDATE() as WindowStart,
dateadd(minute, 10, GETDATE()) as WindowEnd,
dateadd(minute, -2, GETDATE()) as TaskStart,
dateadd(minute, 20, GETDATE()) as TaskEnd
) as TestDates
select TestDates.*,
DATEDIFF(minute,
CASE WHEN TestDates.WindowStart > TestDates.TaskStart
THEN TestDates.WindowStart ELSE TestDates.TaskStart END,
CASE WHEN TestDates.WindowEnd < TestDates.TaskEnd
THEN TestDates.WindowEnd ELSE TestDates.TaskEnd END
) as Interval
from
(
SELECT GETDATE() as WindowStart,
dateadd(minute, 10, GETDATE()) as WindowEnd,
dateadd(minute, 20, GETDATE()) as TaskStart,
dateadd(minute, 30, GETDATE()) as TaskEnd
) as TestDates
select TestDates.*,
DATEDIFF(minute,
CASE WHEN TestDates.WindowStart > TestDates.TaskStart
THEN TestDates.WindowStart ELSE TestDates.TaskStart END,
CASE WHEN TestDates.WindowEnd < TestDates.TaskEnd
THEN TestDates.WindowEnd ELSE TestDates.TaskEnd END
) as Interval
from
(
SELECT GETDATE() as WindowStart,
dateadd(minute, 10, GETDATE()) as WindowEnd,
dateadd(minute, -20, GETDATE()) as TaskStart,
dateadd(minute, -10, GETDATE()) as TaskEnd
) as TestDates