在任何 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)
上的索引会对查询有益。
一个
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)
上的索引会对查询有益。