Я столкнулся с вопросом во время работы, и я был бы очень признателен, если бы кто-нибудь дал мне несколько идей.
У нас есть таблица, в которой отслеживаются задачи, выполненные сотрудником.Структура таблицы, как показано ниже:
EmployeeNum | TaskID |Start Date of task | End Date of task
Я хочу подсчитать, сколько дней каждый сотрудник вложил в каждую задачу, используя эту таблицу.Сначала мой код выглядит следующим образом:
Select
EmployeeNum,TaskID,DateDiff(day,StartDate,EndDate)+1 as PureDay
from
TaskTable
Group by
EmployeeNum,TaskID
Но потом я обнаружил проблему, заключающуюся в том, что для каждой задачи существуют перекрытия в диапазоне дат.
Например, у нас есть TaskA, TaskB, TaskC
для одного сотрудника.
- Задача A с 2018-10-01 по 2018-10-05
- Задача B с 2018-10-02 по 2018-10-07
- TaskC изТаким образом, фактические рабочие дни этого сотрудника должны быть с 2018-10-01 по 2018-10-07, а затем с 2018 по 10-10
.10-09 до 2018-10-10, что составляет 9 дней.Если я вычисляю диапазон дат для каждой задачи, а затем складываю их вместе, то фактические рабочие дни становятся 5 + 6 + 2 = 13 дней вместо 9.
Я брожу, если есть какие-либо хорошие способы решить это перекрытиепроблема?Большое спасибо за любые идеи!