Я настраиваю новый SQL-запрос для суммирования записей из таблицы посещаемости сотрудников.Эти записи загружаются с сенсора отпечатков пальцев или RFID и записываются в одну таблицу.Я хочу получить количество часов на рабочем месте.
Все работает нормально, если сотрудник входит и уходит с работы один раз в день.Устройство генерирует 2 записи в таблице, и это не проблема.Легко определить время входа и выхода.
Но я не понимаю, как решить, если человек входит, делает перерыв (покидает рабочее место), и после этого он входит снова до времени выхода.
Предположим, что они всегда являются четными записями (отметки времени прибытия и выхода) на каждом интервале.Кроме того, сотрудник никогда не проверяет в один день и уходит на следующий день.
У меня есть следующий запрос.Помните: при этом получаются только минимальная временная метка (время прибытия) и максимальная временная метка (время выхода).
SELECT Userid, Name, Date, Entrance, Exit, Hours FROM
(SELECT Userid AS user,
CONVERT(VARCHAR, CONVERT(TIME, min(Checktime))) AS Entrance,
CONVERT(VARCHAR, CONVERT(TIME, max(Checktime))) AS Exit,
CONVERT(VARCHAR, CONVERT(TIME, max(Checktime)-min(CheckTime))) AS Hours,
CONVERT(VARCHAR, CONVERT(DATE, CheckTime)) AS Fecha,
COUNT(*) AS Regs,
SUM(edited) AS edited FROM attendance
WHERE CONVERT(DATE, CheckTime) < CONVERT(DATE, GETDATE())
GROUP BY Userid, CONVERT(DATE, CheckTime)) AS Hs
INNER JOIN Userinfo
ON Userinfo.Userid = Hs.user
ORDER BY Date DESC, Name ASC;
Например, если в таблице есть следующие записи:
id | Logid | Userid | CheckTime | edited
1 | 10 | 1 | 2019-06-18 8:00:00 | 0
2 | 11 | 1 | 2019-06-18 12:00:00 | 0
3 | 12 | 1 | 2019-06-18 15:00:00 | 0
4 | 13 | 1 | 2019-06-18 17:00:00 | 0
5 | 14 | 2 | 2019-06-18 8:00:00 | 0
6 | 15 | 2 | 2019-06-18 17:00:00 | 0
Что я получаю:
Userid | Name | Date | Entrance | Exit | Hours | edited
1 | Gandalf | 2019-06-18 | 8:00:00 | 17:00:00 | 9:00:00 | 0
2 | Frodo | 2019-06-18 | 8:00:00 | 17:00:00 | 9:00:00 | 0
Что мне нужно:
Userid | Name | Date | Entrance | Exit | Hours | edited
1 | Gandalf | 2019-06-18 | 8:00:00 | 17:00:00 | 6:00:00 | 0
2 | Frodo | 2019-06-18 | 8:00:00 | 17:00:00 | 9:00:00 | 0
Общее время было рассчитано с (12:00:00 - 8:00:00) + (17:00: 00 - 15:00:00).В этом случае столбцы «Вход» и «Выход» вообще не нужны.
У вас есть идея, как мне это решить?Большое спасибо!