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

如何在T-SQL中无需Python DataFrame实现患者同期用药查询?

用T-SQL找出患者同期服用的药物方案

不用写while循环或者存储过程逐行遍历,直接用自连接+时间重叠判断就能搞定,这是T-SQL里处理这类区间重叠问题的高效方案,完全符合你不用Python的需求。

核心思路

把用药表和自身做关联,限定同一个患者(pt_id相同),然后筛选出时间区间有重叠的两条不同用药记录,就能得到同期服用的药物组合。

具体SQL代码

假设你的表名叫patient_medications,直接执行下面的语句:

SELECT
    a.pt_id,
    a.drug_name AS drug1,
    b.drug_name AS drug2,
    -- 可额外输出重叠的时间区间
    CASE WHEN a.start_date > b.start_date THEN a.start_date ELSE b.start_date END AS overlap_start,
    CASE WHEN a.end_date < b.end_date THEN a.end_date ELSE b.end_date END AS overlap_end
FROM
    patient_medications a
JOIN
    patient_medications b ON a.pt_id = b.pt_id
WHERE
    -- 确保是两条不同的用药记录,避免自身配对
    a.drug_name <> b.drug_name
    -- 时间区间重叠判断:a的开始不晚于b的结束,且a的结束不早于b的开始
    AND a.start_date <= b.end_date
    AND a.end_date >= b.start_date
    -- 避免重复药物对(如drug1=A,drug2=B和drug1=B,drug2=A)
    AND a.drug_name < b.drug_name
ORDER BY
    a.pt_id, overlap_start;

补充说明

  • 如果同一个患者同一种药物有多条时间重叠的记录,语句会自动过滤相同药物的配对;
  • 时间重叠的判断逻辑覆盖了所有同期用药场景,包括完全包含、部分重叠、首尾相接的情况;
  • 相比while循环或游标逐行处理,这种集合式操作效率高得多,尤其适合数据量较大的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:22:08