如何用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
相关产品推荐
相关产品推荐

