如何找到给定日期范围内的最小计数

时间:2019-02-13 12:25:09

标签: mysql jdbc

我正在尝试为特定日期范围内的工作分配工人,并希望找出在给定日期范围内分配的最少工人数量。

例如,我的表包含

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数据库。

1 个答案:

答案 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”部分添加一天。如何执行取决于您的数据库。