You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL加班分钟转小时汇总计算结果异常问题求助

解决MySQL加班时长汇总错误的问题

问题定位

你的每日查询存在语法逻辑漏洞:GROUP BY date(TimeIN) 时,SELECT 中的 OTM 并非每日加班分钟数的总和,而是分组内任意一条记录的OTM值(MySQL关闭ONLY_FULL_GROUP_BY模式下会返回非聚合字段的随机值)。你可能误将这个单条记录的OTM当作每日总和,导致Excel手动计算时用了错误的数据源;或者MySQL月度汇总的统计范围与Excel存在差异。

解决步骤

1. 修正每日查询,获取准确的每日加班总和

先修改每日查询,确保输出的是每日所有加班记录的分钟数总和,避免误解数据:

SELECT
    EMPID,
    DATE(TimeIN) AS work_date,
    SUM(OTM) AS daily_otm_total,
    TIME_FORMAT(SEC_TO_TIME(SUM(OTM) * 60), '%k.%i') AS daily_oth
FROM attTable
WHERE EMPID='1000126'
AND DATE(TimeIN) BETWEEN '2023-09-26' AND '2023-10-26'
GROUP BY DATE(TimeIN);

将这个查询返回的daily_otm_total全部累加,对比MySQL月度查询的OTMSUM值:

  • 若两者相等:说明MySQL汇总正确,是你Excel手动计算时误用了单条记录的OTM而非每日总和。
  • 若两者不等:说明数据范围或数据本身存在问题,继续下一步排查。

2. 验证月度汇总的统计范围

检查Excel统计是否包含2023-10-26当天的记录:MySQL的BETWEEN '2023-09-26' AND '2023-10-26'会包含10-26当天的所有记录,若Excel未统计这一天,修改查询排除该日期后重试:

SELECT
    EMPID,
    SUM(OTM) AS OTMSUM,
    TIME_FORMAT(SEC_TO_TIME(SUM(OTM) * 60), '%k.%i') AS OTH
FROM attTable
WHERE EMPID='1000126'
AND DATE(TimeIN) BETWEEN '2023-09-26' AND '2023-10-25'
GROUP BY EMPID;

3. 检查单条记录的准确性

导出所有符合条件的OTM记录,手动累加验证:

SELECT OTM, TimeIN
FROM attTable
WHERE EMPID='1000126'
AND DATE(TimeIN) BETWEEN '2023-09-26' AND '2023-10-26'
ORDER BY TimeIN;

逐一核对每条记录的OTM值,确认是否存在误录入的超大数值,或重复记录被多次统计。

4. 排查字段类型精度问题

如果OTM字段是FLOAT类型,可能存在浮点精度误差,建议改为DECIMAL(10,2)类型存储分钟数。可以通过以下查询查看是否存在精度异常:

SELECT OTM, ROUND(OTM, 2) AS rounded_otm
FROM attTable
WHERE EMPID='1000126'
AND DATE(TimeIN) BETWEEN '2023-09-26' AND '2023-10-26'
AND OTM != ROUND(OTM, 2);

内容的提问来源于stack exchange,提问作者airmax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:06:01