|
Задача о рабочем времени сотрудников
|
|||
---|---|---|---|
#18+
Приветствую. Пытаюсь решить задачу подсчета количества часов, отработанных сотрудниками в течении заданного периода времени. В качестве исходных данных имеем таблицу с полями "sessionkey", "username", "startdate", "enddate". Все просто, но есть одно НО. Сотрудники могут как работать в одной сессии, так и запускать несколько сессий в разные моменты времени, и в разные моменты времени их завершать. Таким образом, для каждого сотрудника в таблице будет несколько записей с разными sessionkey и, соответственно, разными startdate и enddate. Если я делаю запрос типа: select username, sum(datediff(second,startdate,enddate)) from employee where (startdate between '2020-05-20 23:59:59' and '2020-05-21 23:59:59') group by username то получаю просто суммарную продолжительность всех сессий, в которых работал сотрудник в течении рабочего дня. Т.е., например, если сотрудник одновременно запустил три сессии и работал 5 часов, а потом эти сессии одновременно закрыл, то мы получим таким подсчетом 15 часов рабочего времени, что неверно. Соответственно, вопрос - как правильно посчитать все временнЫе интервалы с учетом их пересечений, чтобы в итоге вычислить сколько времени сотрудник работал в течении дня. Задача наверняка не очень сложная, но опыта в T-SQL совсем мало, поэтому прошу помощи. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2020, 15:47 |
|
|
start [/forum/topic.php?fid=46&fpage=57&tid=1686019]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
193ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 292ms |
0 / 0 |