在 Teradata 中,SQL 用于计算出院后 30 天内急诊就诊次数的代码
In Teradata, SQL Code to count the number of Emergency Visits within 30 days of leaving a hospital
有人要求我总结出院后 30 天内他们去急诊室的次数。我可以做一个基本的SQL查询并导出到Excel并在做一些手动计算后折腾到pivot,但我想知道是否可以全部写在SQL中?
基本查询是这样的:
SELECTPatient_ID,记录#,站点,Admit_Date,Discharge_Date
从招生
在“2019-01-01”和“2019-12-31”之间 Admit_Date
我希望能够仅对 [Site] = 'Hospital' 在查询中离开医院后 30 天内仅访问 ER 的行进行 SUM,以生成另外两个列:
- AS "Days Since Hospital Discharge"
- AS "ER Visits Within 30 Days After Hospital Discharge and Until Next Hospital Admit"
输出可能如下所示:
Sample Results
我用 Google 搜索了很多次,但找不到可以组合多种解决方案的答案。我认为我可能必须至少执行两个子查询,但不确定将其嵌入何处。任何意见,将不胜感激。谢谢!
您需要嵌套的 OLAP 函数,这应该 return 预期结果:
SELECT dt.*
,CASE
WHEN site = 'Hospital'
THEN Count(CASE WHEN site = 'ER' AND "Days Since Hospital Discharge" <= 30 THEN 1 END)
Over (PARTITION BY Patient_ID
ORDER BY Discharge_Date, Admit_Date
RESET WHEN site = 'Hospital')
END AS "ER Visits Within 30 Days After Hospital Discharge and Until Next Hospital Admit"
FROM
(
SELECT Patient_ID, Record#, Site, Admit_Date, Discharge_Date
,CASE
WHEN site <> 'Hospital'
THEN Admit_Date -
-- the previous discharge date
Max(CASE WHEN site = 'Hospital' THEN Discharge_Date END)
Over (PARTITION BY Patient_ID
ORDER BY Discharge_Date, Admit_Date
ROWS Unbounded Preceding)
END AS "Days Since Hospital Discharge"
FROM Admissions
WHERE Admit_Date BETWEEN DATE '2019-01-01' AND DATE '2019-12-31'
) AS dt
顺便说一句,如果数据以创建 Table + 插入而不是 jpeg
的形式提供,会更容易提供帮助
有人要求我总结出院后 30 天内他们去急诊室的次数。我可以做一个基本的SQL查询并导出到Excel并在做一些手动计算后折腾到pivot,但我想知道是否可以全部写在SQL中?
基本查询是这样的:
SELECTPatient_ID,记录#,站点,Admit_Date,Discharge_Date 从招生 在“2019-01-01”和“2019-12-31”之间 Admit_Date
我希望能够仅对 [Site] = 'Hospital' 在查询中离开医院后 30 天内仅访问 ER 的行进行 SUM,以生成另外两个列:
- AS "Days Since Hospital Discharge"
- AS "ER Visits Within 30 Days After Hospital Discharge and Until Next Hospital Admit"
输出可能如下所示:
Sample Results
我用 Google 搜索了很多次,但找不到可以组合多种解决方案的答案。我认为我可能必须至少执行两个子查询,但不确定将其嵌入何处。任何意见,将不胜感激。谢谢!
您需要嵌套的 OLAP 函数,这应该 return 预期结果:
SELECT dt.*
,CASE
WHEN site = 'Hospital'
THEN Count(CASE WHEN site = 'ER' AND "Days Since Hospital Discharge" <= 30 THEN 1 END)
Over (PARTITION BY Patient_ID
ORDER BY Discharge_Date, Admit_Date
RESET WHEN site = 'Hospital')
END AS "ER Visits Within 30 Days After Hospital Discharge and Until Next Hospital Admit"
FROM
(
SELECT Patient_ID, Record#, Site, Admit_Date, Discharge_Date
,CASE
WHEN site <> 'Hospital'
THEN Admit_Date -
-- the previous discharge date
Max(CASE WHEN site = 'Hospital' THEN Discharge_Date END)
Over (PARTITION BY Patient_ID
ORDER BY Discharge_Date, Admit_Date
ROWS Unbounded Preceding)
END AS "Days Since Hospital Discharge"
FROM Admissions
WHERE Admit_Date BETWEEN DATE '2019-01-01' AND DATE '2019-12-31'
) AS dt
顺便说一句,如果数据以创建 Table + 插入而不是 jpeg
的形式提供,会更容易提供帮助