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

在SQL中捕获镇痛给药前的最新Flowsheet记录最大值

给药前Flowsheet记录最大值/最新值查询方案

针对医疗场景中获取镇痛药物给药前,0-10范围内Flowsheet记录的最大值(或最新记录值)的需求,结合给药时间与Flowsheet记录时间的关联逻辑,提供两种常见场景的SQL实现方案:

场景1:获取给药前所有符合条件的Flowsheet最大值

如果需要的是给药时间点之前,所有0-10范围内Flowsheet记录中的最大值,可通过关联子查询实现:

SELECT
    ma.patient_id,
    ma.admin_time AS 给药时间,
    -- 筛选同一患者、给药前、值在0-10的记录最大值
    (SELECT MAX(fr.value)
     FROM flowsheet_records fr
     WHERE fr.patient_id = ma.patient_id
       AND fr.record_time < ma.admin_time
       AND fr.value BETWEEN 0 AND 10) AS 给药前Flowsheet最大值
FROM medication_administration ma
WHERE ma.medication_type = '镇痛药物'; -- 限定镇痛药物给药记录

场景2:获取给药前最后一条符合条件的Flowsheet记录值

如果你的需求是找到给药时间点之前最新录入的那条0-10范围内的Flowsheet记录值(结合MAX(fr.record_time)的逻辑),可使用横向关联来实现:

SELECT
    ma.patient_id,
    ma.admin_time AS 给药时间,
    fr.value AS 给药前最后一条Flowsheet值,
    fr.record_time AS 最后一条记录时间
FROM medication_administration ma
LEFT JOIN LATERAL (
    SELECT value, record_time
    FROM flowsheet_records fr
    WHERE fr.patient_id = ma.patient_id
      AND fr.record_time < ma.admin_time
      AND fr.value BETWEEN 0 AND 10
    ORDER BY record_time DESC -- 按记录时间倒序取最新
    LIMIT 1
) fr ON true
WHERE ma.medication_type = '镇痛药物';

注意事项

  • 不同数据库对横向关联的语法支持不同:PostgreSQL用LATERAL,SQL Server用OUTER APPLY,MySQL 8.0+也支持LATERAL;
  • 若需要处理无符合条件记录的情况,可在字段前加COALESCE(..., 0)来设置默认值;
  • 确保patient_id、record_time、admin_time字段有合适的索引,避免大数据量下查询性能过慢。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:30:50