You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL技术咨询:如何查询多次因同一诊断入院的患者?

问题分析与解决方案

你的原SQL逻辑存在问题:当前按diagnosis和admission_date分组,只能统计同一天、同一诊断的多次入院记录,但你需要的是同一患者、同一诊断的多次入院(无论日期),所以分组字段错误,而且admission_date在分组后直接查询会导致结果不确定(部分SQL模式下会报错)。

子查询实现方案

方案1:仅展示符合条件的患者ID和诊断(去重)

如果只需要知道哪些患者因同一诊断多次入院,直接用子查询筛选符合条件的组合即可:

SELECT DISTINCT patient_id, diagnosis
FROM admissions
WHERE (patient_id, diagnosis) IN (
    -- 子查询:统计每个患者-诊断组合的入院次数,筛选次数>1的
    SELECT patient_id, diagnosis
    FROM admissions
    GROUP BY patient_id, diagnosis
    HAVING COUNT(*) > 1
);

方案2:展示所有符合条件的入院记录(含入院日期)

如果需要查看这些患者每次入院的详细记录,可以用子查询关联原表:

SELECT a.patient_id, a.diagnosis, a.admission_date
FROM admissions a
INNER JOIN (
    -- 子查询先找出多次入院的患者-诊断组合
    SELECT patient_id, diagnosis
    FROM admissions
    GROUP BY patient_id, diagnosis
    HAVING COUNT(*) > 1
) AS b 
ON a.patient_id = b.patient_id AND a.diagnosis = b.diagnosis;

更简洁的非子查询写法(可选)

其实不需要子查询也能直接实现需求,逻辑更直观:

SELECT patient_id, diagnosis
FROM admissions
GROUP BY patient_id, diagnosis
HAVING COUNT(*) > 1;

如果需要保留所有入院记录,只需把GROUP BY换成窗口函数:

SELECT patient_id, diagnosis, admission_date
FROM (
    SELECT *,
           COUNT(*) OVER (PARTITION BY patient_id, diagnosis) AS admission_count
    FROM admissions
) AS temp
WHERE admission_count > 1;

内容的提问来源于stack exchange,提问作者xlmaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:15:33