如何在MS Access中筛选ID与DATE对应的重复行记录?
在MS Access中筛选同一ID同一日期的重复记录
核心单条查询方案
根据需求,这里提供两种兼容MS Access的单条SQL查询方案,可直接使用:
方案1:多字段IN子查询(简洁高效)
如果你的Access版本支持多字段IN语法,优先用这个:
SELECT a.*, m.* FROM Absen a INNER JOIN MASTERID m ON a.ID = m.ID WHERE (a.ID, a.DATE) IN ( -- 先找出所有出现2次及以上的ID+日期组合 SELECT ID, DATE FROM Absen GROUP BY ID, DATE HAVING COUNT(*) >= 2 ) ORDER BY a.ID, a.DATE;
方案2:EXISTS子查询(兼容所有Access版本)
如果Access不支持多字段IN,改用EXISTS判断重复:
SELECT a.*, m.* FROM Absen a INNER JOIN MASTERID m ON a.ID = m.ID WHERE EXISTS ( SELECT 1 FROM Absen a2 WHERE a2.ID = a.ID AND a2.DATE = a.DATE -- 替换成Absen表的主键字段(比如ID_Absen),确保是同组但不同的记录 AND a2.ID_Absen <> a.ID_Absen ) ORDER BY a.ID, a.DATE;
处理DateTime类型的DATE字段
如果你的DATE字段是DateTime类型(包含时间部分),会导致同一天但不同时间的记录被当成不同组,需要提取纯日期部分:
SELECT a.*, m.* FROM Absen a INNER JOIN MASTERID m ON a.ID = m.ID WHERE (a.ID, DATEVALUE(a.DATE)) IN ( SELECT ID, DATEVALUE(DATE) FROM Absen GROUP BY ID, DATEVALUE(DATE) HAVING COUNT(*) >= 2 ) ORDER BY a.ID, DATEVALUE(a.DATE);
原查询无结果的常见原因排查
- 分组字段错误:原查询可能只按
ID或DATE单一字段分组,没有同时按两个字段分组 - HAVING条件错误:比如写成
COUNT(*) = 1而不是>=2 - 表关联错误:
Absen和MASTERID的关联字段不匹配(比如用了错误的ID字段) - 日期格式问题:DateTime字段包含时间,导致分组时无法识别为同一天(用
DATEVALUE()处理即可)
内容的提问来源于stack exchange,提问作者dlaksmi
相关产品推荐
相关产品推荐

