Как получить количество дополнительных часов, зарегистрированных за каждый день, указанный в хранимой процедуре MySQL - PullRequest
0 голосов
/ 06 января 2019

Имея отчет о посещаемости, который отображает вход, выход на обеденное время, вход на обеденное время и конечный выход для каждого пользователя, мне нужно отобразить дополнительные отработанные часы, считая только время после 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 () дополнительного времени, указанного для даты), я могу предоставить более подробную информацию.

1 Ответ

0 голосов
/ 06 января 2019

Попробуйте этот запрос:

SELECT 
        UserID, 
        GREATEST(
        "00:00:00", 
         TIMEDIFF( 
                  LEAST( DayExit, DATE_FORMAT( DayExit,  "%Y-%m-%d 21:30:00" ) ) , 
                  DATE_FORMAT( DayExit,  "%Y-%m-%d 20:30:00" ) 
                  ) 
                 )
FROM    `tblassistance` 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...