Имея отчет о посещаемости, который отображает вход, выход на обеденное время, вход на обеденное время и конечный выход для каждого пользователя, мне нужно отобразить дополнительные отработанные часы, считая только время после 20:30 и ограниченное 21:30.
т.е.
если работник сообщает о своем выходе около 20:10, это не считается дополнительным временем.
если работник сообщает о своем выходе около 21:00, это считается дополнительным временем.
если работник сообщает о своем выходе после 21:30, он должен учитываться как дополнительное время только до 21:30.
Имея следующую таблицу:
CREATE TABLE `tblassistance` (
`Entrance` datetime NOT NULL,
`LunchExit` datetime DEFAULT NULL,
`LunchEntrance` datetime DEFAULT NULL,
`DayExit` datetime DEFAULT NULL,
`UserID` int(11) NOT NULL);
INSERT INTO tblassistance(Entrance, LunchExit, LunchEntrance, DayExit, UserID) VALUES ('2019-01-05 14:30:00','2019-01-05 15:30:00','2019-01-05 16:30:00','2019-01-05 21:30:00', '1');
INSERT INTO tblassistance(Entrance, LunchExit, LunchEntrance, DayExit, UserID) VALUES ('2019-01-05 14:30:00','2019-01-05 15:30:00','2019-01-05 16:30:00','2019-01-05 21:36:00', '2');
INSERT INTO tblassistance(Entrance, LunchExit, LunchEntrance, DayExit, UserID) VALUES ('2019-01-05 14:30:00','2019-01-05 15:30:00','2019-01-05 16:30:00','2019-01-05 21:00:00', '3');
INSERT INTO tblassistance(Entrance, LunchExit, LunchEntrance, DayExit, UserID) VALUES ('2019-01-05 14:30:00','2019-01-05 15:30:00','2019-01-05 16:30:00','2019-01-05 20:10:00', '4');
В отчете должно отображаться дополнительное время для каждого пользователя, считая с 20:30 каждого дня, ограниченное 21: 30.
Пока мне удалось (попытаться) набросать следующий запрос:
(SELECT TIMEDIFF(DATE(tblassistance.DayExit) = CURDATE() && tblassistance.DayExit> (SELECT CONCAT(CURDATE(), ' 21:30:00'))) GROUP BY tblassistance.userID, tblassistance.entrance
Исходный отчет в формате хранимой процедуры, который получает только начальную и конечную дату, а также сообщает количество дней и другие параметры, не связанные с данной проблемой. Если это необходимо для решения данной проблемы (получение количества TIMEDIFF () дополнительного времени, указанного для даты), я могу предоставить более подробную информацию.