Я пытаюсь выяснить, как считать часы, отработанные для каждого сотрудника в каждый день, но возвращенные цифры далеко.Часть, которая мне нужна, взята из одной таблицы, показанной на этом рисунке. Таблица
Показывает активность одного сотрудника за один день (есть еще много записей, я просто решил показать один день).Большинство сотрудников устраивают обед, и поэтому у них есть 2 входа и 2 выхода.
К нему присоединена еще одна таблица, но пока это не важно.
В столбце InOut показанобыли ли они врезаться или нет.In = 1 и Out = 0.
Я пробовал код ниже.Похоже, что дата не возвращает правильное число.
select sr_name,
cast(punchintime as date) as workdate,
ROUND(sum(cast(datediff(minute,punchintime, punchouttime) as real)/60),2) as hoursworked
from
(
select sr_name,
punchintime = punchdatetime,
punchouttime = ISNULL((select top 1 pc2.punchdatetime
from punchclock pc2 where pc2.punchdatetime > pc.punchdatetime and pc.servrepid = pc2.servrepid and pc2.inout = 0 order by pc2.punchdatetime), getdate())
from punchclock pc
join servicereps sr on pc.servrepid = sr.servrepid
where cast(pc.punchdatetime as date) >= '2019-01-01'
group by sr_name, punchdatetime, pc.ServRepID
) x
сгруппировать по sr_name, приведению (punchintime как дата), cast (punchouttime - punchintime как время)
Результаты должныэтот запрос будет составлять около 8 часов вместо 20-30 часов.