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

如何编写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:01:30