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

这将按患者对最后一次就诊前六个月内的所有就诊进行分组。它会给你 COUNT(总数)减一(不包括最后一次访问)。

完整示例: http: //pastebin.com/vpCdASpB

对于第二部分(患者表),请参见此处: 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 回答