基于条件创建分组



希望获得以下缺口和孤岛问题的帮助

我有以下示例数据集:

ADM_DTDCHG_DT01-01-202102-01-202101-01-202101-01-2021<1>><1>202102-15-2021<1>2021年2月2日
MEM_ID CLM_IDPROV
1 111 01-01-2021
1 112 01-01-20211
1 113 2021年1月1日1
1 114 2021年1月1日
1 115 2021年1月1日01-01-2021
1 116 2021年2月15日
1 117 2021年2月15日3
1 118 2021年2月16日 22021年2月16-2021 3
21 01-01-2021 01-01-2021
22 12 2021年3月1日 22
31 2021年2月1日1
32 2021年2月2日 22021年2月1日
select *,
sum(gap) over (partition by MEM_ID order by ADM_DT, CLM_ID) as grp
from (
select *,
case when
ADM_DT =
lag(ADM_DT)  over (partition by MEM_ID, PROV order by ADM_DT, CLM_ID)
or           
days_between(
ADM_DT,
lag(DCHG_DT) over (partition by MEM_ID, PROV order by ADM_DT, CLM_ID)
) in (0, 1) -- not sure if zero is valid
then 0 else 1 end as gap
from c1
) t
order by MEM_ID, PROV, GRP, ADM_DT

如果你没有days_between()可用,那么显然你只会使用when lag(DCHG_DT) over (partition by MEM_ID, PROV order by ADM_DT, CLM_ID) - ADM_DT

注意,Postgres处理日期数学的方式不同,但你可以尝试一下https://dbfiddle.uk/?rdbms=postgres_13&fiddle=95f28f3d57c520d1e45422b588dcdd85

最新更新