我有一个3表结构,以便:
表患者 - PatientID PK与表预约(PK ApptID)有1对多的关系 Table Appointment与表Encounter(PK EncounterID)有1对多的关系。 ApptID是Encounter表的FK。
Encounter表有一些值得注意的字段。 PK:EncounterID,FK:ApptID,DateofEncounter(datetime)和Code(varchar)。最后两个不是键或任何东西。
我想要做的是搜索具有相同代码,相同ApptID和相同DateoFEncounter的重复遭遇。我想要一个PatientID列表,然后是ApptID
我有这个SQL,其中列出了PatientID,ApptID和Encounters。但我不知道这些遭遇是否重复。 (他们可能在不同的日期,或不同的代码,或不是什么)。我不知道如何使用相同的代码找到同一天发生的那些。有什么建议吗?
select a.PatientID, a.ApptID, COUNT(e.EncounterID) AS NumberOfEncounters
FROM Appointment a LEFT JOIN Encounter e on e.ApptID = a.ApptID
GROUP BY a.PatientID, a.ApptID
ORDER BY COUNT(e.EncounterID) DESC
答案 0 :(得分:1)
select a.PatientID, a.ApptID, COUNT(e.EncounterID) AS NumberOfEncounters
FROM Appointment a LEFT JOIN Encounter e on e.ApptID = a.ApptID
AND EXISTS (SELECT * FROM Encounter e2 WHERE e.pkEncounterID <> e2.pkEncounterID AND e.Code = e2.Code AND e.DateofEncounter = e2.DateofEncounter AND e.ApptID = e2.ApptID)
GROUP BY a.PatientID, a.ApptID
ORDER BY COUNT(e.EncounterID) DESC