【问题标题】:How can i find minimum count in a given date range如何找到给定日期范围内的最小计数
【发布时间】:2019-02-13 12:25:08
【问题描述】:

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

例如,我的表包含

startDate     endDate       No.of.Workers
---------    ---------     ---------------
1-1-2019     10-1-2019           1
11-1-2019    20-1-2019           1

现在,我想找出在 2019 年 1 月 1 日至 2019 年 1 月 20 日期间工作的工人的最低人数。 输出应该是 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数据库。

【问题讨论】:

  • 到目前为止你有什么尝试?

标签: mysql jdbc


【解决方案1】:

您可以通过拆分数据、聚合和使用累积和来获得所需的工人数量:

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”部分添加一天。如何做到这一点取决于您的数据库。

【讨论】:

  • 我使用mysql数据库
  • 这适用于 MySQL 8,除了 fetch first 1 row only 应该是 limit 1
  • 你能解释一下解决办法吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2014-03-29
  • 2019-07-11
  • 2019-11-08
  • 2017-07-14
相关资源
最近更新 更多