Вы можете получить необходимое количество работников, разделив данные, агрегируя и используя кумулятивные суммы:
with dtes as (
select startDate as dte, numworks
from t
union all
select endDate as dte, - numworks
from t
)
select dte, sum(numworks),
sum(sum(numworks)) over (order by dte) as needed
from dtes
group by dte
order by dte;
Чтобы получить максимум, вы можете сделать что-то вроде этого:
select dte, sum(numworks),
sum(sum(numworks)) over (order by dte) as needed
from dtes
group by dte
order by needed desc
fetch first 1 row only;
Вы не указываете базу данных, fetch first
- это стандарт ISO / ANSI SQL.
Также неясно, считается ли дата окончания одним из дней.Это может повлиять на результаты.Если он включен, то вам нужно добавить один день к части «endDate» логики.Как вы это сделаете, зависит от вашей базы данных.