在医院就诊时,患者可能会服用几种不同的药物配方,如下所示:
遭遇 | 药物 | 给药Adm_Num | |||
---|---|---|---|---|---|
1 | A | 21年8月31日上午11:331 | |||
1 | B | 21年8月31日下午6:25||||
1 | C | 9/1/21 8:55||||
1 | D | 9/1/21 10:00 PM4 | |||
1 | B | 21年9月2日上午11:27 | 5 | ||
1 | B | 9/21/21 10:00 PM6 | |||
1 | B | 9/21上午6:157 | |||
1 | B | 9/21下午3:30||||
1 | D | 9/21下午8:309 | [/tr>
这是一种"间隙和岛";问题
一种方法是首先使用滞后或超前检查相邻行,以确定数据(药物(的变化位置,然后将结果中每行的所有前几行的值相加,以生成所需序列:
with c as (
select *,
case when
Lag(medication) over (partition by encounter order by Administration) = medication
then 0 else 1 end Changed
from t
)
select Encounter, Medication, Administration, Adm_Num,
Sum(changed) over(partition by Encounter order by Administration) Formulation
from c;