2017-01-08 3 views
0

환자가 특정 외래 치료주기에 참여한 시간, 즉 이론적으로 매일 있어야하는 외래 환자 유닛을 추적해야합니다. 일반적으로 약속 날짜에 최소값과 최대 값을 지정할 수 있습니다. 그러나 환자가 치료 1 주일을 놓친 경우 다시 카운트를 시작해야합니다. 그 시간 차이를 설명하려고하는 데 문제가 있습니다.갭이있는 두 날짜 사이의 차이 계산

예 :환자 A는 1/1-1/12에서 매일 치료를 받았고 휴식을 취하고 1/20까지 돌아 오지 않았으며 1/20, 1/23, 1/26에 치료를받습니다. , 1/29. 그래서 나는 12 일 동안 1 일과 10 일 동안 1 일을 계산해야합니다.

+6

가지고 도움이 될 것입니다 : 당신이 치료의 각 에피소드의 날짜 수를 원하는 경우

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 

: 규칙이 차이가 1 주일 경우에, 당신은 lag() 누적 합계를 사용할 수 있습니다 샘플 데이터 및 원하는 결과. –

+2

Google은 틈과 섬을두고 있습니다. –

+1

질문 할 때 사용중인 sql-server의 버전을 포함하십시오. – SqlZim

답변

1

환자 ID와 날짜가있는 열이있는 경우 날짜를 인접성의 "섬"으로 그룹화 할 수 있습니다.

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;