在Serv_from_date后的27天内,我们必须对serv_unit_cnt求和



输入数据:在此处输入图像描述

SN  SRC_MBR_ID  MEDCLM_KEY  CALENDAR_PROCESS_DATE   SERV_FROM_DATE  SERV_UNIT_CNT
5   022502303   32761925957 9/9/2017                8/23/2017       30.00
6   022502303   32791176170 9/19/2017               9/6/2017        30.00
7   022502303   32855914080 10/7/2017               9/20/2017       30.00
8   022502303   33301033608 2/9/2018                10/4/2017       30.00
9   022502303   33301033637 2/9/2018                10/4/2017       30.00

预期输出 :在此处输入图像描述

SN  SRC_MBR_ID  MEDCLM_KEY  CALENDAR_PROCESS_DATE   SERV_FROM_DATE  SERV_UNIT_CNT   sum_serv_unit_cnt
5   022502303   32761925957 9/9/2017                8/23/2017       30.00           30
6   022502303   32791176170 9/19/2017               9/6/2017        30.00           60
7   022502303   32855914080 10/7/2017               9/20/2017       30.00           30
8   022502303   33301033608 2/9/2018                10/4/2017       30.00           60
9   022502303   33301033637 2/9/2018                10/4/2017       30.00           90

输入的结果 :

---> sn - 5 serv_from_date 是 8/23/2017,serv_unit_cnt 是 30。 所以sum_serv_unit是30。

---> SN- 6 serv_from_date是 9/06/2017,serv_unit_cnt是 30。 根据 27 天从第一行第二行serv_from_date秋天是 14 天所以我们必须求和 serv_unit_cnt是60。

从第一行serv_from_date到第三行的--->天不同是 29 所以它与第一行不同不是 27 天serv_from_date所以sum_serv_unit_cnt是30岁。

---> 一旦我们再次打破 27 天,我们需要考虑新的serv_from_date所以我考虑了第 7 行serv_from_date。必须计算。

您需要标识组,然后使用窗口函数。 使用 lag() 确定组的开始位置,使用累积总和定义组,然后使用最终总和:

select t.*,
       sum(SERV_UNIT_CNT) over (partition by SRC_MBR_ID, grp order by SERV_FROM_DATE) as sum_serv_unit_cnt
from (select t.*,
             sum(case when prev_sfd > SERV_FROM_DATE - 14 then 0 else 1 end) over (partition by SRC_MBR_ID order by SERV_FROM_DATE) as grp
      from (select t.*,
                   lag(SERV_FROM_DATE) over (partition by SRC_MBR_ID order by SERV_FROM_DATE) as prev_sfd
            from t
           ) t
      ) t;

相关内容

最新更新