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

MySQL多子查询行日期差计算:员工在职总天数统计实现咨询

搞定MySQL中员工总工作天数计算的问题

嘿,别纠结循环的事儿啦!MySQL本身就擅长集合操作,咱们用简单的关联和聚合函数就能实现你要的效果,根本用不着循环。直接上解决方案:

SELECT 
    t1.emp_id,
    t1.emp_name,
    COALESCE(SUM(DATEDIFF(COALESCE(t2.End_date, CURDATE()), t2.Start_date)), 0) AS Total_days
FROM 
    表1 t1
LEFT JOIN 
    表2 t2 ON t1.emp_id = t2.emp_id
GROUP BY 
    t1.emp_id, t1.emp_name;

给你拆解一下代码逻辑:

  • LEFT JOIN关联两张表:确保像CCC那样在表2里没任何记录的员工,也能出现在结果里,不会被漏掉。
  • COALESCE(t2.End_date, CURDATE()):专门处理End_date为空的情况——空值就用当前日期CURDATE()代替,这样就能把未结束的时间段算到今天。
  • DATEDIFF(结束日期, 开始日期):计算单个时间段的天数差,注意参数顺序是先结束后开始,返回的是两个日期之间的天数差值。
  • SUM(...):把同一个员工的所有时间段天数加起来,得到总工作天数。
  • COALESCE(SUM(...), 0):如果员工没任何时间段记录(比如CCC),SUM会返回NULL,这时候用COALESCE把它转成0,完美匹配你的预期输出。

对应你的测试数据验证:

  • 员工AAA(emp_id=1)的三个时间段累加后正好是3030天
  • 员工BBB(emp_id=2)的两个时间段总和是3273天
  • 员工CCC(emp_id=3)无记录,直接返回0

这个方法全程用集合操作,效率高还容易维护,比循环靠谱多啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:54:01