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

MySQL中使用DATEDIFF统计指定时段内员工任务天数(含跨年场景)

统计任务在指定时间范围内的实际天数

你的schedule表存储员工任务记录,原查询在处理跨年度/跨季度的任务时,会把任务全部时长计入指定年度,无法准确统计任务落在目标时间范围内的天数。要解决这个问题,需要计算任务时间与目标区间的重叠天数,而非任务的总时长。

修改后的查询语句(以2023年度为例)

SELECT
    taskname,
    employee,
    startDate,
    endDate,
    SUM(
        DATEDIFF(
            LEAST(endDate, '2023-12-31'),
            GREATEST(startDate, '2023-01-01')
        ) + 1
    ) AS total_days
FROM
    schedule
WHERE
    startDate <= '2023-12-31'
    AND endDate >= '2023-01-01'
GROUP BY
    employee,
    taskname

关键逻辑说明

  • GREATEST(startDate, '2023-01-01'):取任务开始日期和年度起始日期的较大值,确保只从年度开始后计算天数
  • LEAST(endDate, '2023-12-31'):取任务结束日期和年度结束日期的较小值,确保只计算到年度结束的天数
  • DATEDIFF(...) + 1:计算两个日期之间的天数(包含首尾日期)
  • 保留原WHERE子句:过滤掉完全不在2023年度的任务,避免无效计算

如果要统计季度(比如2023年Q1),只需把日期参数换成'2023-01-01'和'2023-03-31'即可,逻辑完全通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:15:36