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

admit/readmit SQL查询未捕获全部readmit记录问题排查

你的查询漏捕获记录的核心问题如下:

  • 匹配场景覆盖不全:仅判断了「上次入院在上月、本次入院在当月」的再入院场景,同一个患者两次入院都在当月的场景完全没有覆盖,这是漏数据的最主要原因。
  • NULL值判断逻辑错误:CH1.MedId <> 'NULL'是判断MedId不等于字符串'NULL',如果MedId是数据库标准NULL值,该判断会直接失效,正确写法为CH1.MedId IS NOT NULL。
  • 存在不必要的隐式转换:DATEDIFF函数返回结果为整数,和字符串'30'比较依赖数据库隐式转换,部分场景下会出现判断异常,直接和数字30比较即可。
  • 语法细节错误:查询字段CH3. Status中间多了多余空格,若字段名本身不含空格会触发字段不存在报错。

修正后的查询语句:

SELECT
    CH3.MedId,
    CH3.Name,
    CH3.Description,
    CH3.StartDate,
    CH3.EndDate,
    CH3.Length_of_Stay,
    CH3.Status,
    CASE
        WHEN EXISTS (
            SELECT 1 
            FROM (
                -- 合并两个月的所有入院记录,覆盖跨月、同月两种再入院场景
                SELECT MedId, StartDate FROM currentmonth
                UNION ALL
                SELECT MedId, StartDate FROM previousMonth
            ) all_admit
            WHERE all_admit.MedId = CH3.MedId
                AND all_admit.StartDate < CH3.StartDate
                AND DATEDIFF(DAY, all_admit.StartDate, CH3.StartDate) <= 30
        ) THEN 'Readmit'
        ELSE 'Admit'
    END AS Admit_ReAdmit
FROM currentmonth CH3
ORDER BY CH3.Name;

修正说明:

  • 用UNION ALL合并当月和上月的所有入院记录,不管两次入院落在同一个月还是跨月,只要时间间隔<=30天都能正常匹配。
  • 用EXISTS替代原来的IN逻辑,匹配效率更高,也避免了IN子查询返回NULL时的逻辑异常问题。
  • 直接关联当前行的入院时间和历史入院时间做判断,逻辑更直观准确,不会出现漏匹配的情况。
  • 修正了原有查询的NULL判断、数字比较、字段名多余空格等语法问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:24:03