在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
相关产品推荐
相关产品推荐

