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

SSMS中基于Patient_ID和Days_Since_Last_Visit的CASE语句编写求助

解决方案

针对你的需求,需要利用**窗口函数LEAD()和LAG()**关联同Patient_ID下的上下行数据,结合CASE语句完成标签标注。假设你的表中有用于确定行顺序的日期字段(比如Visit_Date,若实际字段不同请替换),以下是可行的SQL写法:

WITH PatientVisit AS (
    SELECT 
        Patient_ID,
        Days_Since_Last_Visit,
        -- 获取下一行的Days_Since_Last_Visit值
        LEAD(Days_Since_Last_Visit) OVER (PARTITION BY Patient_ID ORDER BY Visit_Date) AS Next_Days,
        -- 获取上一行的Days_Since_Last_Visit值
        LAG(Days_Since_Last_Visit) OVER (PARTITION BY Patient_ID ORDER BY Visit_Date) AS Prev_Days
    FROM YourTableName -- 替换为你的实际表名
)
SELECT 
    Patient_ID,
    Days_Since_Last_Visit,
    CASE
        -- 当前行是NULL,下一行>0 → 标'Set'
        WHEN Days_Since_Last_Visit IS NULL AND Next_Days > 0 THEN 'Set'
        -- 当前行是NULL,下一行=0 → 标'NO'
        WHEN Days_Since_Last_Visit IS NULL AND Next_Days = 0 THEN 'NO'
        -- 上一行是NULL,当前行>0 → 标'Set'
        WHEN Prev_Days IS NULL AND Days_Since_Last_Visit > 0 THEN 'Set'
        -- 上一行是NULL,当前行=0 → 标'NO'
        WHEN Prev_Days IS NULL AND Days_Since_Last_Visit = 0 THEN 'NO'
        -- 其余情况标'No'
        ELSE 'No'
    END AS Tag
FROM PatientVisit;

关键说明

  • PARTITION BY Patient_ID确保仅在同一患者的行内进行上下行关联
  • ORDER BY Visit_Date必须指定行的排序逻辑,否则上下行关联会混乱(请根据业务实际替换排序字段)
  • LEAD()取当前行的下一行值,LAG()取当前行的上一行值,通过这两个函数捕捉你需要的行间关系

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:07:07