有一份显示每个用户的入口、午餐时间出口、午餐时间入口和最终出口的出勤报告,我只需要显示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()额外报告的时间量),我可以提供进一步的细节。