言い換えれば、私は各患者が(最後の訪問-6か月)と最後の訪問を除く最後の訪問の間の訪問数を見つける必要があります。
WITH CTE AS
(
SELECT PatientID, MAX(ActualDate) AS LastVisit
FROM Visits
GROUP BY PatientID
)
SELECT CTE.PatientID, COUNT(1)-1 AS RepeatVisits
FROM CTE INNER JOIN Visits ON CTE.PatientID = Visits.PatientID
WHERE ActualDate BETWEEN DATEADD(month, -6, LastVisit) AND LastVisit
GROUP BY CTE.PatientId
これにより、最後の来院前の 6 か月間のすべての来院が患者別にグループ化されます。これにより、COUNT (合計) から 1 を引いた値が得られます (最後の訪問を除く)。
完全な例: http://pastebin.com/vpCdASpB
2 番目の部分 (患者テーブル) については、こちらを参照してください: http://pastebin.com/nKw0Wqvp
WITH CTE AS
(
SELECT Patients.PatientID, Patients.Name, MAX(ActualDate) AS LastVisit
FROM Patients LEFT JOIN Visits ON #patient.PatientID = Visits.PatientID
GROUP BY Patients.PatientID, Patients.Name
)
SELECT CTE.PatientID, CTE.Name, COUNT(1)-1 AS RepeatVisits
FROM CTE LEFT JOIN Visits ON CTE.PatientID = Visits.PatientID
AND Visits.ActualDate BETWEEN DATEADD(month, -6, LastVisit) AND LastVisit
GROUP BY CTE.PatientId, CTE.Name
ORDER BY PatientID;