按分组聚合医疗数据:就诊等级统计与费用汇总需求
医疗就诊数据聚合解决方案
原始数据
| Location | PT_ID | Visit_DT | Discharge_DT | InjuryLevel | InjuryCode | Claim_ID | Cost |
|---|---|---|---|---|---|---|---|
| Ab1 | 0001 | 01-01-2021 | 01-03-2021 | 7 | I03 | clm078 | -400 |
| Ab1 | 0001 | 01-01-2021 | 01-03-2021 | 1 | I03 | clm079 | 400 |
| Ab1 | 0001 | 01-01-2021 | 01-03-2021 | 3 | I03 | clm068 | 500 |
| Ab1 | 0001 | 01-01-2021 | 01-03-2021 | 3 | I03 | clm008 | 75 |
| Ab2 | 0002 | 04-11-2021 | 04-12-2021 | 5 | I03 | clm111 | 1000 |
| Ab2 | 0002 | 05-01-2021 | 05-03-2021 | 5 | I03 | clm176 | 900 |
| Ab2 | 0002 | 08-08-2021 | 08-09-2021 | 6 | I03 | clm187 | 2000 |
需求说明
- 同一患者同一次就诊(相同
Visit_DT和Discharge_DT视为一次就诊),取该次就诊的最大InjuryLevel - 按患者分组统计:
InjuryLevel1to5:最大InjuryLevel在1-5区间的就诊次数InjuryLevel6to10:最大InjuryLevel在6-10区间的就诊次数TotalCost:该患者所有索赔记录的费用总和
- 目标输出格式:
| Location | PT_ID | InjuryLevel1to5 | InjuryLevel6to10 | TotalCost |
|---|---|---|---|---|
| Ab1 | 0001 | 0 | 1 | 575 |
| Ab2 | 0002 | 2 | 1 | 3900 |
解决方案(SQL实现)
完整代码
WITH visit_summary AS ( SELECT Location, PT_ID, Visit_DT, Discharge_DT, MAX(InjuryLevel) AS max_injury_level FROM original_table GROUP BY Location, PT_ID, Visit_DT, Discharge_DT ), patient_total_cost AS ( SELECT PT_ID, SUM(Cost) AS TotalCost FROM original_table GROUP BY PT_ID ) SELECT vs.Location, vs.PT_ID, SUM(CASE WHEN vs.max_injury_level BETWEEN 1 AND 5 THEN 1 ELSE 0 END) AS InjuryLevel1to5, SUM(CASE WHEN vs.max_injury_level BETWEEN 6 AND 10 THEN 1 ELSE 0 END) AS InjuryLevel6to10, ptc.TotalCost FROM visit_summary vs JOIN patient_total_cost ptc ON vs.PT_ID = ptc.PT_ID GROUP BY vs.Location, vs.PT_ID, ptc.TotalCost;
代码说明
- visit_summary:按患者、就诊日期分组,计算每次就诊的最高损伤等级,确保同一次就诊只保留最高等级记录
- patient_total_cost:单独计算每个患者的总费用,避免重复统计
- 最终查询通过
CASE WHEN逻辑统计不同区间的就诊次数,关联总费用后得到目标结果
内容的提问来源于stack exchange,提问作者Trevor M
相关产品推荐
相关产品推荐

