Access中统计指定日期区间两表重复项的两种计数方法
Access 指定日期区间内重复项统计方案
前提说明
- 表一:
[Unique Values](存储唯一值集合),字段:Number、Close Time、Max Date - 表二:存储含重复值的原始数据,字段:
Number、Close Time - 统计逻辑基于指定日期区间,区分两种统计维度:
- 包含目标值的计数:统计表二中
Number存在于表一的记录,在日期区间内的出现次数(含重复) - 排除目标值的计数:统计表二中
Number不存在于表一的记录,在日期区间内的出现次数(含重复)
- 包含目标值的计数:统计表二中
1. 包含目标值的计数查询
按Number分组统计重复次数
使用内连接关联表一和表二,限定日期区间后分组统计:
SELECT t2.Number, COUNT(t2.[Close Time]) AS 重复计数 FROM [Unique Values] t1 INNER JOIN 表二 t2 ON t1.Number = t2.Number WHERE t2.[Close Time] BETWEEN #起始日期# AND #结束日期# GROUP BY t2.Number ORDER BY 重复计数 DESC;
统计包含目标值的总记录数
若只需总计数而非按Number分组,可简化为:
SELECT COUNT(*) AS 包含目标值总计数 FROM [Unique Values] t1 INNER JOIN 表二 t2 ON t1.Number = t2.Number WHERE t2.[Close Time] BETWEEN #起始日期# AND #结束日期#;
2. 排除目标值的计数查询
按Number分组统计重复次数
使用左连接筛选出表二中不在表一的Number记录,再统计日期区间内的次数:
SELECT t2.Number, COUNT(t2.[Close Time]) AS 重复计数 FROM 表二 t2 LEFT JOIN [Unique Values] t1 ON t2.Number = t1.Number WHERE t1.Number IS NULL AND t2.[Close Time] BETWEEN #起始日期# AND #结束日期# GROUP BY t2.Number ORDER BY 重复计数 DESC;
统计排除目标值的总记录数
总计数简化版:
SELECT COUNT(*) AS 排除目标值总计数 FROM 表二 t2 LEFT JOIN [Unique Values] t1 ON t2.Number = t1.Number WHERE t1.Number IS NULL AND t2.[Close Time] BETWEEN #起始日期# AND #结束日期#;
百万级数据性能优化建议
- 给表二的
Number和Close Time字段创建复合索引,加速关联和日期筛选 - 避免在查询中用函数处理
Close Time字段(如日期格式转换),直接用原始字段做区间判断 - 若只需总计数,优先使用无分组的简化查询,减少计算开销
内容的提问来源于stack exchange,提问作者Saied Ahmed
相关产品推荐
相关产品推荐

