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

如何用Snowflake SQL筛选同一日期有多次就诊的患者全量记录行?

筛选同一患者同一日期多次就诊的所有记录

需求:从已生成带行号(RowNum)的患者就诊记录中,仅保留同一PatientID+EncounterDate组合下就诊次数≥2的所有行(比如某患者同一日期就诊3次,需显示全部3行)。

示例原始数据

PatientID     EncounterDate
111            2024-08-01
111            2024-08-01
111            2024-08-01
111            2024-08-02
111            2024-08-03
222            2024-08-01
333            2024-08-01
444            2024-08-01 

解决方案

方法1:用窗口函数直接筛选

这是最简洁的写法,通过窗口函数计算每个PatientID+日期组合的总就诊次数,直接过滤出次数≥2的行:

SELECT *
FROM (
    -- 替换成你已生成带RowNum的查询语句
    SELECT PatientID, EncounterDate, RowNum
    FROM YourOriginalTable
) t
WHERE COUNT(*) OVER (PARTITION BY PatientID, EncounterDate) >= 2;

方法2:子查询分组后关联

如果你的SQL环境对窗口函数支持有限,可以用分组子查询先定位符合条件的患者+日期组合,再关联原表获取所有行:

SELECT t.*
FROM (
    -- 替换成你已生成带RowNum的查询语句
    SELECT PatientID, EncounterDate, RowNum
    FROM YourOriginalTable
) t
INNER JOIN (
    SELECT PatientID, EncounterDate
    FROM YourOriginalTable
    GROUP BY PatientID, EncounterDate
    HAVING COUNT(*) >= 2
) g 
ON t.PatientID = g.PatientID AND t.EncounterDate = g.EncounterDate;

效果

执行上述任一语句后,会仅返回PatientID为111、EncounterDate为2024-08-01的3条记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:50:04