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

如何修改SQL实现每日仅计1条记录的员工工作天数统计

员工工作天数统计SQL修改方案

原统计逻辑直接计数符合筛选条件的班次记录总数,会导致同一日期存在多条有效班次时重复计数,无法准确核算实际工作天数。要实现「同一日期下无论多少条符合条件的记录仅计数1次」的规则,有两种常用实现方式:

方案1:去重计数(最简写法,适配当前需求)

直接将原语句的COUNT(*)替换为COUNT(DISTINCT DATO),数据库会自动对符合筛选条件的日期去重后再统计总数,写法最简单,性能也最优。
修改后的完整SQL:

SELECT COUNT(DISTINCT DATO) AS actual_work_days
FROM dbo.dutyrostershift 
WHERE employeeid = 1931 
  AND DATO BETWEEN '20210901' AND '20220831' 
  AND shifttype IN (0,1,4,5,6,15,16,20)

边界提示:如果DATO字段是带时分秒的datetime/datetime2类型,原写法的BETWEEN '20210901' AND '20220831'会漏算2022年8月31日0点之后的记录,这种场景建议把时间范围条件调整为DATO >= '20210901' AND DATO < '20220901',统计结果更准确。如果DATO是纯date类型则无需调整。

方案2:分组聚合后计数(扩展性更强)

如果后续需要扩展统计维度,比如同时统计每个工作日的班次数量、最早/最晚班次时间等,可以先按日期分组去重,外层再统计分组总数,逻辑和方案1完全等价,更方便后续扩展字段。
写法示例:

SELECT COUNT(*) AS actual_work_days
FROM (
    SELECT DATO
    FROM dbo.dutyrostershift 
    WHERE employeeid = 1931 
      AND DATO BETWEEN '20210901' AND '20220831' 
      AND shifttype IN (0,1,4,5,6,15,16,20)
    GROUP BY DATO
) AS daily_shift

内容的提问来源于stack exchange,提问作者Edvard Korsbæk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:21:18