簡體   English   中英

SQL條件求和和分組

[英]SQL Conditional sum and grouping

我有一個查詢,試圖總結患者在醫院的停留時間。 這是數據的一個例子

| Patient | Admission_ID | Admission_Event_ID | Admission_Event_Type  | Start Date | End Date   | Duration | Linked_Admission |
| P0001   | ADM0001      | AE1                | (formal) Separation   | 2012-12-18 | 2012-12-18 | 0        | ADM0002          |
| P0001   | ADM0001      | AE2                | Statistical Admission | 2012-12-17 | 2012-12-18 | 1        | ADM0002          |
| P0001   | ADM0002      | AE3                | Statistical Separation| 2012-12-17 | 2012-12-17 | 0        | NULL             |
| P0001   | ADM0002      | AE4                | (formal) Admission    | 2012-11-30 | 2012-12-17 | 17       | NULL             |
| P0002   | ADM0003      | AE5                | (formal) Admission    | 2012-11-30 | 2012-12-25 | 25       | NULL             |
. . . 

編輯:忘了提及,有一個鏈接入院ID的列(僅在統計上分開並入院的患者中使用)


根據定義,住院時間的長短是從入院開始到分居為止計算的(統計分隔和入院隨入院而進行,但是會給他們一個新的入院ID

運行報告以查找醫院及其單位的平均住院時間(ALOS),用戶選擇兩個日期進行報告。 我使用了CTE(我們稱其為CTESep )來獲取在報告期間之間正式分離的所有患者。 然后,我使用另一個CTE(稱為CTEAdmissions )來獲取CTESep中所有患者的入院信息。 這就是我卡住的地方。

我需要總結一下患者的住院時間,以得出該次住院的總住院時間(這是ADM0001和ADM0002的組合),因此總LOS將為18,而不是17和1。我的想法是

    ORDER BY Patient
    , End_Date DESC
    , adm_id
    , CASE WHEN 
            Admission_Event_Type  = '(formal) Separation   ' THEN 1
           WHEN Admission_Event_Type  = 'Statistical Admission ' THEN 2
           WHEN Admission_Event_Type  = 'Statistical Separation' THEN 3
           WHEN Admission_Event_Type  = '(formal) Admission    ' THEN 4 
      END ASC

然后根據條件總結持續時間。 條件規則是“開始匯總每個患者從正式分居到正式住院的時間” 我不確定該怎么做。 我試過了:

SELECT SUM(Duration) OVER(PARTITION BY Patient) AS 'Sum'

但這將為我提供患者在所有入院時的總服務水平(如果他們在該報告期間內有多個分居),我也嘗試過

 SELECT SUM(Duration) OVER(PARTITION BY Patient, Admission_ID) AS 'Sum'

但是,當然,這使我在正式入院和統計分離之間獲得了患者的服務水平(而不是其實際定義的服務水平)。

任何人都有不同的方式來解決這個問題? 順便說一下,使用Sybase

這個怎么樣:

select patientid,
       admissionid,
       datediff(day, 
                  max(case when Admission_Event_Type = '(formal) Separation   ' then startdate end),
                  max(case when Admission_Event_Type = '(formal) Admission    ' then enddate end)
               ) as total_length
from data
group by patientid, admissionid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM