如何按日期统计任意时间点未结工单(ID)的去重计数?
按日期统计每日未结工单数量的解决方案
你的思路完全可行——通过关联独立的Dates表,结合非等值关联条件,就能准确统计全年每日的未结工单去重数量。具体实现逻辑如下:
核心思路
以Dates表为基础(确保每天都有统计记录),将其与工单表做非等值关联:判断统计日期是否处于工单的创建日期之后,且在工单的实际完成日期之前(对于未结工单,实际完成日期为NULL,需单独处理这类情况),最后按日期分组统计去重后的工单ID数量。
SQL示例(通用版)
SELECT d.date AS 统计日期, COUNT(DISTINCT t.incident_id) AS 未结工单数量 FROM Dates d LEFT JOIN 工单表 t ON d.date >= t.created_date AND (d.date <= t.actual_completion_date OR t.actual_completion_date IS NULL) -- 若工单状态字段明确可靠,建议添加以下条件过滤已结工单 -- AND t.incident_status = '未结' GROUP BY d.date ORDER BY d.date;
关键细节说明
- 处理未结工单:未结工单的
actual_completion_date通常为NULL,因此关联条件中用OR t.actual_completion_date IS NULL来覆盖这类场景——只要统计日期晚于等于工单创建日期,且工单未完成,就判定为当天未结。 - 去重统计:使用
COUNT(DISTINCT t.incident_id)确保同一个工单不会在多天统计中被重复计算(避免工单跨多天未结时被多次计数)。 - Dates表的作用:作为主表使用
LEFT JOIN,保证即使某天没有未结工单,也会输出该日期并显示数量为0,不会遗漏任何日期。
内容的提问来源于stack exchange,提问作者Chris Hall
相关产品推荐
相关产品推荐

