我需要设计一个在MS Access表中找到“重复项”的查询。它们不是真正的重复,因为每个领域都不相同,但患者在60天内不太可能被看到两次,因此该时间跨度内的2条记录可能是重复的。
表中的相关列是: id整数自动增量 patientid文本 程序日期/时间
我想制作一份patientid列表,其中程序在彼此的60天内。我能够通过以下查询找到所有“重复”的列表:
SELECT * FROM tblProcedures patientid = ANY (SELECT tblProcedures.patientid 来自tblProcedures GROUP BY tblProcedures.patientid HUNT COUNT(tblProcedures.patientid)> 1) ORDER BY tblProcedures.patientid,tblProcedures.proceduredate DESC
但是我不确定如何将结果限制在涉及相同病人的记录中,其中程序在上一个程序的60天内。
答案 0 :(得分: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
答案 1 :(得分: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