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

SQL计算两个日期间工作日:排除周末节假日并按员工年月分组统计

实现方案

首先先建好法定节假日表,结构参考如下,提前录入所有需要排除的法定节假日日期:

-- 节假日表结构示例
CREATE TABLE `holidays` (
  `holiday_date` date NOT NULL PRIMARY KEY COMMENT '节假日日期'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

然后修改原有查询,新增节假日表关联和过滤逻辑即可,修改后的SQL如下:

SELECT 
  t.id_employee, 
  EXTRACT(YEAR FROM t.Date) AS year, 
  EXTRACT(MONTH FROM t.Date) AS month, 
  SUM(CASE WHEN WEEKDAY(t.`Date`) < 5 AND h.holiday_date IS NULL THEN 1 ELSE 0 END) AS days 
FROM (
  SELECT 
    v.id_employee, 
    DATE_ADD(v.start, interval s.seq - 1 DAY) AS Date 
  FROM vacations v 
  CROSS JOIN seq_1_to_100 s 
  WHERE DATE_ADD(v.start, interval s.seq - 1 DAY) <= v.end 
) t 
LEFT JOIN holidays h ON t.`Date` = h.holiday_date
GROUP BY t.id_employee, EXTRACT(YEAR_MONTH FROM t.`Date`);
  • 逻辑说明:
    • 通过左连接关联节假日表,若holiday_date返回空则说明该日期不是法定节假日
    • 计数时同时满足两个条件才会被统计:一是日期为周一到周五(WEEKDAY返回值0-4对应周一到周五,小于5即为工作日),二是日期不在法定节假日表中
    • 原有按天拆分休假周期、按员工+年月分组的逻辑完全保留,不需要调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:36:02