mysql - 如何获取在 MySQL 存储过程中报告的每天注册的额外小时数
问题描述
有一个显示每个用户的入口、午餐时间出口、午餐时间入口和最终出口的出勤报告,我需要显示仅计算 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() 额外时间量),我可以提供更多详细信息。
解决方案
试试这个查询:
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`
推荐阅读
- google-bigquery - 从输入数组中查找包含最多项目的数组
- php - 仅当不为空或 null 时才输出数组的值
- android - Firebase 实时数据库:用户 ID 未显示在子项中
- python - 根据另外两个字典替换字典值列表
- javascript - Chrome 扩展程序:URL 权限不起作用
- powershell - 使用 Powershell 从一个文件夹中的多个 CSV 文件中删除前 15 行
- druid - 创建Druid schema时为什么需要在dimensionSpec中添加列
- heroku - 可以将敏感配置添加到 heroku.yml 文件并提交到 Heroku 的 GIT 存储库吗?
- javascript - 透视效果仅适用于未封闭的 img 标签。为什么?以及如何解决?
- python - 如何将混合数据类型的 3D 数组加载到 Tensorflow 中进行训练?