0

というテーブルがありますVisits

ID(PKey,Int)
PatiendID(int),
DoctorID(int),
ExpectedDate(date),
ActualDate(date),

各患者の再来回数を返すクエリを作成するにはどうすればよいですか。

前回の訪問から半年未満の場合、再訪問と見なされます。

言い換えれば、各患者が(最後の訪問-6か月)と最後の訪問を除く最後の訪問の間の訪問数を見つける必要があります。カーソルなしでクエリを書くことは可能ですか?

そして他の質問。私はテーブル患者を持ってい ID(int, PKey),Name,Pasport,State ます ここから各クライアントが同じ情報を見つけることは可能ですか? または、以下のクエリと訪問テーブルに含まれていないすべてのクライアントを結合した方がよいでしょうか?

4

1 に答える 1

2

言い換えれば、私は各患者が(最後の訪問-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;
于 2012-04-25T16:59:46.450 に答える