【问题标题】:Summing up only the values of previous rows with the same ID仅对具有相同 ID 的先前行的值求和
【发布时间】:2020-06-17 05:14:51
【问题描述】:

当我准备用于预测医院未出现的数据时,我遇到了以下问题: )。 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,然后它还计算了患者 2 的未出现患者 1 的情况。因此,它单独适用于 1 名患者,但不适用于整个数据集。

TOTAL_APPTs 列成功了,因为它计算了患者在给定 appt 时的 appts 数量。我的问题是:我如何成功地将这些节目和未出现的节目成功加起来(就像我对患者 1 所做的那样)?我完全知道为什么这个查询不起作用,我只是完全不知道如何解决它..

【问题讨论】:

    标签: sql tsql subquery window-functions


    【解决方案1】:

    认为你可以只使用窗口函数。您似乎正在寻找窗口 sums 的节目,而每位患者都没有节目,所以:

    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
    

    【讨论】:

    • 这成功了!感谢您的超快速解决方案!大约 2 分钟后,我会接受这个答案:)
    猜你喜欢
    • 2018-04-12
    • 2020-01-09
    • 2017-08-03
    • 1970-01-01
    • 2020-08-23
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多