SQL查询优化:仅标记#TRAN表中Business Code变更的行
解决方案:用窗口函数
LAG()标记Business变更行 嘿,你可以用LAG()窗口函数来简化查询,直接对比当前行和同一ID的上一行Business值,就能精准标记出变更的行,不需要原来那种复杂的CTE关联啦。
修改后的SQL代码
SELECT ID, Business, STDT, -- 对比当前行与上一行的Business,不同则标记1,否则为空 CASE WHEN Business <> LAG(Business) OVER (PARTITION BY ID ORDER BY STDT) THEN 1 ELSE NULL END AS Flag FROM #TRAN ORDER BY ID, STDT;
代码说明
LAG(Business) OVER (PARTITION BY ID ORDER BY STDT):这个窗口函数会为每一行获取同一ID、按STDT排序的上一行的Business值。CASE语句:如果当前行的Business和上一行不同,就设置Flag为1,否则返回NULL(也就是空值)。- 最后按ID和STDT排序,和你期望的结果顺序完全一致。
这个查询会直接输出你要的格式,只在Business发生变更的行(也就是和上一行Business不同的行)标记Flag=1,其余行Flag为空,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者Sujita
相关产品推荐
相关产品推荐

