我需要跟踪一个门诊单位患者参与某个门诊治疗周期的时间,理论上应该是每天。通常我可以在预约日期做一个最小和最大。但是,如果患者错过了一周的治疗,那么我必须重新开始计算一天。我在试图解释这个时间差距时遇到了问题。
例如: 患者A每天从1 / 1-1 / 12参加治疗,然后她休息一下,直到1月20日才回来,并在1 / 20,1 / 23,1 / 26和1/29接受治疗。所以我应该有两天一天12天,一天10天。
答案 0 :(得分:1)
如果您有一个包含患者ID和日期的列,则可以将日期分组为邻接的“孤岛”。如果您的规则是一周的差异,那么您可以使用lag()
和累积总和:
select t.*,
sum(startflag) over (partition by patientid order by date) as episode
from (select t.*,
(case when lag(date) over (partition by patientid order by date) < dateadd(day, -7, date)
then 1 else 0
end) as startflag
from t
) t
如果您想要每一集治疗的日期计数:
select patientid, min(date), max(date), count(*) as numtreatments
from (select t.*,
sum(startflag) over (partition by patientid order by date) as episode
from (select t.*,
(case when lag(date) over (partition by patientid order by date) < dateadd(day, -7, date)
then 1 else 0
end) as startflag
from t
) t
) t
group by patientid, episode;