Как я могу найти минимальное количество в указанном диапазоне дат - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь назначить работников для работы на определенный диапазон дат и хотел выяснить минимальное количество работников, выделенных для данного диапазона дат.

Например, моя таблица содержит

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 голосов
/ 13 февраля 2019

Вы можете получить необходимое количество работников, разделив данные, агрегируя и используя кумулятивные суммы:

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» логики.Как вы это сделаете, зависит от вашей базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...