2011-03-07 78 views
0

我需要设计一个在MS Access表中查找“重复项”的查询。它们并不是真实的重复,因为每个领域都不相同,但是在60天内两次看病人的可能性很小,所以在这个时间范围内的2个记录可能是重复的。MS Access - 查询设计帮助

在表中的相关列是: ID整数自动增量 patientid文本 proceduredate日期/时间

我想产生patientid的列表,其中proceduredate是在彼此的60天。我能找到的所有 “重复” 的列表,用下面的查询:

SELECT * FROM tblProcedures WHERE patientid = ANY (SELECT tblProcedures.patientid FROM tblProcedures GROUP BY tblProcedures.patientid HAVING COUNT(tblProcedures .patientid)> 1) ORDER BY tblProcedures.patientid,tblProcedures.proceduredate DESC

但我不知道如何将结果限制涉及同一patientid其中proceduredate不到前面的过程60天的记录。

回答

0

一种解决方案是将表与自身:

Select * 
From tblProcedures As P1 
    Inner Join tblProcedures As P2 
     On P2.PatientId = P1.PatientId 
       And P2.Id <> P1.Id 
Where Abs(DateDiff("d", P1.ProcedureDate, P2.ProcedureDate)) <= 60 
Order By P1.PatientId, P1.ProcedureDate Desc 
0

我想你想要的东西,如:

SELECT * 
FROM tblProcedures P1 
LEFT JOIN tblProcedures P2 
    ON P1.patientid = P2.patientid 
    AND P1.proceduredate < P2.proceduredate 
    AND DateDiff("d", P1.proceduredate, P2.Proceduredate) <= 60 
WHERE P2.patientid IS NOT NULL 
ORDER BY P1.patientid, P1.proceduredate DESC