SQL Server如何实现双重聚合 统计预测与实际事件时间差在x分钟内的数量
解决思路
- 先完成第一次聚合,拿到每个ID对应的唯一非空
Actual值,也就是你需要的事件最终值 - 再把第一次聚合的结果和原表关联,计算每条记录的
Estimate与对应Actual的时间差,做第二次聚合统计符合条件的记录数
适配SQL Server的实现代码
-- 定义时间差边界,此处示例为5分钟 DECLARE @time_boundary INT = 5; WITH id_final_actual AS ( -- 第一次聚合:获取每个ID的最终实际时间 SELECT ID, MAX(Actual) AS final_actual FROM 你的业务表名 WHERE Actual IS NOT NULL GROUP BY ID ) -- 第二次聚合:统计时间差在边界内的记录数量 SELECT t.ID, SUM(CASE WHEN ABS(DATEDIFF(MINUTE, t.Estimate, fa.final_actual)) <= @time_boundary THEN 1 ELSE 0 END) AS qualified_count FROM 你的业务表名 t INNER JOIN id_final_actual fa ON t.ID = fa.ID GROUP BY t.ID
结果说明
用你提供的样本数据执行上述代码,输出结果如下,和预期完全匹配:
| ID | qualified_count |
|---|---|
| X1XX | 2 |
| X2XX | 1 |
内容的提问来源于stack exchange,提问作者David Boshton
相关产品推荐
相关产品推荐

