如何编写SQL查询筛选特定手术/用药条件的患者及相关数据
针对两个SQL需求的解决方案
需求1:找出指定时长y内接受x次手术的患者
假设手术记录存储在surgery_records表,核心字段为patient_id(患者ID)、surgery_date(手术日期)。以下SQL可实现需求,其中y和x可替换为具体数值(比如90 days、3):
SELECT patient_id FROM surgery_records WHERE surgery_date >= CURRENT_DATE - INTERVAL 'y days' GROUP BY patient_id HAVING COUNT(*) = x;
- 若时长单位为月/年,调整
INTERVAL参数即可,例如INTERVAL '6 months' - 若需关联患者基础信息,可结合
patients表(假设存在):
SELECT p.patient_id, p.name FROM patients p JOIN surgery_records s ON p.patient_id = s.patient_id WHERE s.surgery_date >= CURRENT_DATE - INTERVAL 'y days' GROUP BY p.patient_id, p.name HAVING COUNT(s.surgery_id) = x;
需求2:特定药物患者的数据分析与筛选
假设用药记录存储在medication_dispenses表,核心字段为patient_id(患者ID)、medication_name(药物名称)、dispense_date(配药日期)、treatment_duration(单次治疗时长,单位:月)、visit_id(就诊ID,标识独立就诊)。
1. 基础数据分析(用药次数、首次用药后治疗时长)
SELECT patient_id, COUNT(*) AS medication_times, SUM(treatment_duration) AS total_treatment_months, -- 计算首次用药到最后一次用药的时长(转成月) EXTRACT(MONTH FROM AGE(MAX(dispense_date), MIN(dispense_date))) AS months_since_first_dispense FROM medication_dispenses WHERE medication_name = '目标药物名称' GROUP BY patient_id;
2. 筛选符合条件的患者ID
SELECT patient_id FROM medication_dispenses WHERE medication_name = '目标药物名称' GROUP BY patient_id HAVING SUM(treatment_duration) >= 4 AND COUNT(DISTINCT visit_id) >= 2;
- 若表中无
visit_id,可用COUNT(DISTINCT dispense_date)替代,默认不同日期为独立就诊
内容的提问来源于stack exchange,提问作者sqlrobert
相关产品推荐
相关产品推荐

