如何用子查询替代临时表实现Power BI/Snowflake关联的SQL查询
替换临时表为子查询的Snowflake SQL实现
最终SQL代码
SELECT DISTINCT ihp.INCIDENT_NUMBER, ihp.ASSIGNED_GROUP, ihp.ASSIGNED_GROUP_SEQ_NO, ihp.History_Start_Date FROM INCIDENT_HISTORY_PUBLIC ihp INNER JOIN ( -- 原临时表DS_TEMP的逻辑直接转为子查询 SELECT INCIDENT_NUMBER, Assigned_Group, Assigned_Group_SEQ_NO AS SEQ_NO FROM INCIDENT_HISTORY_PUBLIC WHERE ASSIGNED_GROUP LIKE ' DS$_%' ESCAPE '$' ) ds_temp ON ihp.INCIDENT_NUMBER = ds_temp.INCIDENT_NUMBER WHERE ihp.ASSIGNED_GROUP NOT LIKE '%Help_Desk%' AND ihp.ASSIGNED_GROUP_SEQ_NO < ds_temp.SEQ_NO ORDER BY ihp.INCIDENT_NUMBER, ihp.ASSIGNED_GROUP_SEQ_NO;
逻辑说明
- 子查询替代临时表:将原创建临时表并插入数据的逻辑,直接封装为内连接的子查询
ds_temp,完全复刻原临时表的筛选规则(匹配特定格式的ASSIGNED_GROUP) - 关联与筛选:保持原查询的核心逻辑——关联同一事件编号的记录,排除归属组包含
Help_Desk的条目,仅保留序列号小于子查询中对应记录序列号的结果 - 去重与排序:保留原语句的
DISTINCT去重和排序规则,确保输出结果与原临时表方案完全一致
关于max()方案失败的说明
原需求并非取每个事件的最大序列号,而是要匹配所有符合ASSIGNED_GROUP LIKE ' DS$_%'的记录的序列号,再找出同事件下序列号更小的其他记录。误用max()会丢失多个符合条件的DS组记录对应的匹配逻辑,导致结果不全。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

