我有一个问题,试图总结患者在医院的住院时间。以下是数据的示例
| 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'
但是,这将为我提供所有入院患者的总LOS(如果他们在该报告期内有多个分居) 我也试过了
SELECT SUM(Duration) OVER(PARTITION BY Patient, Admission_ID) AS 'Sum'
但当然,这给了我正式录取和统计分离之间的患者LOS(而不是实际定义的LOS)。
任何人都有不同的解决方法吗?顺便说一句,使用Sybase
答案 0 :(得分:0)
这个怎么样:
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