В течение 27 дней с момента Serv_from_date мы должны сложить serv_unit_cnt - PullRequest
0 голосов
/ 08 февраля 2019

Входные данные: введите описание изображения здесь

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 - 23.08.2017, а serv_unit_cnt - 30, поэтому sum_serv_unit - 30.

---> sn- 6 serv_from_date - 9 /06/2017, а serv_unit_cnt равен 30. Согласно 27 дням, начиная с 1-го ряда, во второй строке падение serv_from_date составляет 14 дней, поэтому мы должны суммировать. Serv_unit_cnt равно 60.

---> от 1-го ряда serv_from_date до 3-го дняотличается от 29, поэтому он не отличается на 27 дней от 1-й строки serv_from_date, поэтому sum_serv_unit_cnt равен 30.

---> Как только мы снова разбиваем 27 дней, нам нужно рассмотреть новый serv_from_date, поэтому я считаю 7-й строкой serv_from_date.как мудрый мы должны рассчитать.

1 Ответ

0 голосов
/ 08 февраля 2019

Вам необходимо определить группы, а затем использовать оконные функции.Используйте 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...