Snowflake基于Number类型WorkWeek字段动态查询最近3周数据
Snowflake动态筛选最新3周工作周数据方案
核心逻辑说明
你的业务表中WorkWeek字段为YYYYWW格式的周度编号,不管是数值类型还是同格式字符串类型,字段值的大小顺序和周度时间先后顺序完全一致,不需要额外做日期类型转换,直接基于字段排序取最新3个周值筛选即可,新增周度数据时查询条件会自动适配,无需手动修改。
推荐写法1:窗口函数实现(性能最优,鲁棒性最强)
使用DENSE_RANK()窗口函数对所有周度按倒序打排名标签,筛选排名前3的记录即可,同周多条数据不会错排,存在周度数据缺失时也能准确取到实际存在的最新3个周的数据:
SELECT WorkWeek, Data1, Data2 FROM ( SELECT *, DENSE_RANK() OVER (ORDER BY WorkWeek DESC) AS week_rank FROM DB -- 替换为实际业务表名 ) ranked_week WHERE week_rank <= 3;
推荐写法2:IN子查询实现(和原有手动枚举逻辑完全对齐)
如果习惯和原有IN枚举写法保持一致,可以先子查询查出最新的3个不重复周值,再做匹配:
SELECT * FROM DB WHERE WorkWeek IN ( SELECT DISTINCT WorkWeek FROM DB ORDER BY WorkWeek DESC LIMIT 3 );
效果验证
基于你提供的样例数据(包含202232~202235四个周度记录),上述两种写法都会自动返回202233、202234、202235三个周的所有行;后续表中新增202236周数据时,查询结果会自动更新为返回202234、202235、202236的数据,全程不需要手动修改查询条件。
注意:如果后续业务有调整需要取最新N周的数据,只需要把上述代码里的
3改成对应数字即可,不需要调整其他逻辑。
内容的提问来源于stack exchange,提问作者QYTeng
相关产品推荐
相关产品推荐

