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

如何在同一张患者记录表中筛选符合绩效分差值条件的出入院记录

问题分析

你遇到的核心问题是:INNER JOIN会将匹配的EX和EN记录合并到同一行,而你需要的是将它们作为独立的行输出。另外你尝试的UNION ALL写法有误,因为外层查询无法引用子查询中的a和b别名(子查询的作用域仅限于自身)。

解决方案

这里提供两种可靠的方法来得到你想要的结果:

方法一:先筛选符合条件的ID,再提取对应记录

这种方法先找出所有满足「出院绩效分低于入院绩效分」的患者ID,然后从原表中取出这些ID的所有出入院记录:

SELECT *
FROM My_table
WHERE ID IN (
    SELECT a.ID
    FROM My_table a
    INNER JOIN My_table b 
        ON a.ID = b.ID
    WHERE a.TYPE = 'EX'
      AND b.TYPE = 'EN'
      AND a.PERFORMANCE_SCORE < b.PERFORMANCE_SCORE -- 等价于差值为负
)
ORDER BY ID, TYPE DESC; -- 按ID分组,EX记录在前,EN在后,可根据需求调整排序规则

说明:子查询中通过关联同一个表的EX和EN记录,筛选出出院分低于入院分的ID;外层查询则取出这些ID的所有记录,最终得到符合要求的记录对。

方法二:用UNION ALL分别提取EX和EN记录

这种方法直接查询符合条件的EX记录和对应的EN记录,再用UNION ALL合并成独立的行:

-- 提取符合条件的出院记录
SELECT a.*
FROM My_table a
INNER JOIN My_table b 
    ON a.ID = b.ID
WHERE a.TYPE = 'EX'
  AND b.TYPE = 'EN'
  AND a.PERFORMANCE_SCORE < b.PERFORMANCE_SCORE

UNION ALL

-- 提取对应的入院记录
SELECT b.*
FROM My_table a
INNER JOIN My_table b 
    ON a.ID = b.ID
WHERE a.TYPE = 'EX'
  AND b.TYPE = 'EN'
  AND a.PERFORMANCE_SCORE < b.PERFORMANCE_SCORE

ORDER BY ID, TYPE DESC;

说明:第一个查询块获取所有满足条件的EX记录,第二个查询块获取对应的EN记录,UNION ALL会保留所有行(这里不会有重复),最后排序让同一患者的记录相邻。

额外提示

如果你的数据中存在一个患者有多组出入院记录的情况,建议在关联时增加日期匹配条件(比如将每个EX记录关联到其之前最近的EN记录),避免错误匹配。例如:

SELECT a.*
FROM My_table a
INNER JOIN My_table b 
    ON a.ID = b.ID
    AND a.DATE > b.DATE -- 确保出院日期晚于入院日期
WHERE a.TYPE = 'EX'
  AND b.TYPE = 'EN'
  AND a.PERFORMANCE_SCORE < b.PERFORMANCE_SCORE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:30:07