在任何 8 周内使用 FK 计算最大行数

Count maximum rows with FK in any 8-week period

一个不太符合我的需求。我正在使用 SSMS(SQL 服务器)。我想为 8 周内患者的预约计数添加一列(ApptDate 到 ApptDate + 56)。最好的方法是什么? (任何示例代码将不胜感激。)数据 table 看起来有点像这样:

ApptID      PatientID    ApptDate 
----------------------------------
Appt1       Pt1          Datetime1
Appt2       Pt1          Datetime2
Appt3       Pt2          Datetime3
...         ...          ...

我希望输出如下所示:

ApptID     PatientID     ApptDate    CountOfVisitInNext8Wks (i.e. Datetime to Datetime+56)
-----------------------------------------------------------
Appt1      Pt1           Datetime1   2
Appt2      Pt1           Datetime2   1
Appt3      Pt2           Datetime3   7
...        ...           ...         ...

我计划使用上面的输出 table 创建另一个 table 显示患者的最大计数:

PatientID   MaxCountOfVisitInNext8Wks
-------------------------------------
Pt1         2
Pt2         7

我的数据集很小,所以效率不是问题。我不知道如何最好地解决这个问题(例如,子查询、上面链接的 post 中的内部联接,以及带有日期参数的循环)。我是 SQL 的新手。提前致谢。

您可以使用 apply 或相关子查询:

select t.*,
       (select count(*)
        from t t2
        where t2.patientId = t.patientId and
              t2.apptdate >= t.apptdate and
              t2.apptdate < dateadd(day, 56, t.apptdate)
       ) as cnt_8_weeks
from t;

请注意,这会计算当天的约会。所以,你可能真的想排除使用:

              t2.apptdate > t.apptdate and
              t2.apptdate < =dateadd(day, 56, t.apptdate)

确切的逻辑不是 100% 清楚。

您可以将此逻辑用作子查询或 CTE,并为您的最终结果进行聚合。

虽然您不关心性能,但 (patientId, apptDate) 上的索引会对查询有益。