我正在尝试为特定日期范围内的工作分配工人,并希望找出在给定日期范围内分配的最少工人数量。
例如,我的表包含
startDate endDate No.of.Workers
--------- --------- ---------------
1-1-2019 10-1-2019 1
11-1-2019 20-1-2019 1
现在,我想找出在1-1-2019至20-1-2019日期范围内工作的最低人数。 输出应为1。
假设我的桌子看起来像
startDate endDate No.of.Workers
--------- --------- ---------------
1-1-2019 10-1-2019 1
11-1-2019 20-1-2019 1
11-1-2019 15-1-2019 1
输出应为2。
是否在sql中对此有任何查询,或者我需要编写算法?
我正在使用mysql数据库。
答案 0 :(得分:0)
您可以通过拆分数据,汇总并使用累加的总和来获得所需的工作人员数量:
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”部分添加一天。如何执行取决于您的数据库。