Суммирование только значений предыдущих строк с одинаковым идентификатором - PullRequest
1 голос
/ 04 марта 2020

Поскольку я готовлю свои данные для прогнозирования неявок в больнице, я столкнулся со следующей проблемой: В приведенном ниже запросе я попытался получить количество показов / неявок, относящихся к числу встреч (APPTS). ). INDICATION_NO_SHOW означает, появился ли пациент на приеме. 0 означает показ, а 1 означает не показывать.

with t1 as 
(
select
    PAT_ID                                                              
    ,APPT_TIME
    ,APPT_ID                                                                
    ,ROW_NUMBER () over(PARTITION BY PAT_ID order by pat_id,APPT_TIME) as [TOTAL_APPTS] 
    ,INDICATION_NO_SHOW
from appointments
)
,
t2 as
(
 t1.PAT_ID
 ,t1.APPT_TIME
 ,INDICATION_NO_SHOW
 ,sum(INDICATION_NO_SHOW) over(order by PAT_ID, APPT_TIME ) as TOTAL_NO_SHOWS
 ,TOTAL_APPT
 from t1
 )
  SELECT *
  ,(TOTAL_APPT- TOTAL_NO_SHOWS) AS TOTAL_SHOWS
  FROM T2
  order by PAT_ID, APPT_TIME

Это привело к следующему набору данных:

 PAT ID  APPT_TIME INDICATION_NO_SHOW  TOTAL_SHOWS TOTAL_NO_SHOWS  TOTAL_APPTS 
 1        1-1-2001     0                     1            0              1       
 1        1-2-2001     0                     2            0              2       
 1        1-3-2001     1                     2            1              3       
 1        1-4-2001     0                     3            1              4      
 2        1-1-2001     0                     0            1              1       
 2        2-1-2001     0                     1            1              2       
 2        2-2-2001     1                     1            2              3       
 2        2-3-2001     0                     2            2              4       

Как вы можете видеть, мой запрос работал только для пациента 1, а затем он также считает неявки для пациента 1 для пациента 2. Таким образом, индивидуально он работал для 1 пациента, но не для всего набора данных.

Сработал столбец TOTAL_APPTs, поскольку он подсчитывал количество апплетов пациента имел в данный момент данное прибл. Мой вопрос: как я могу успешно добавить эти показы и неявки (как я сделал для пациента 1)? Я полностью осознаю, почему этот запрос не работает, я просто в отчаянии, как это исправить ..

1 Ответ

0 голосов
/ 04 марта 2020

Я думаю , что вы можете просто использовать оконные функции. Похоже, вы ищете окно sum с шоу и ни одного шоу на пациента, поэтому:

select
    pat_id,
    appt_time,
    indication_no_show,
    sum(1 - indication_no_show) 
        over(partition by pat_id order by appt_time) total_shows,
    sum(indication_no_show) 
        over(partition by pat_id order by appt_time) total_no_shows
from appointments
...