[英]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.