Snowflake SQL实现:基于最新日期值填充新列
Snowflake SQL:将最新日期对应REC_COUNT值填充至全行列
解决方案1:使用窗口函数实现
无需额外子查询,直接通过窗口函数获取并广播最新日期的处理后值:
SELECT PREVIOUS_DAY, REC_COUNT, -- 提取最新日期的REC_COUNT并移除逗号 REPLACE( FIRST_VALUE(REC_COUNT) OVER (ORDER BY PREVIOUS_DAY DESC), ',' ) AS FINAL_CLMN FROM your_table_name;
解决方案2:使用CTE+交叉连接实现
通过公共表表达式单独获取最新日期的处理后值,再映射到所有行:
WITH latest_record AS ( SELECT REPLACE(REC_COUNT, ',') AS cleaned_latest_value FROM your_table_name ORDER BY PREVIOUS_DAY DESC LIMIT 1 ) SELECT t.PREVIOUS_DAY, t.REC_COUNT, lr.cleaned_latest_value AS FINAL_CLMN FROM your_table_name t CROSS JOIN latest_record lr;
关键逻辑说明
REPLACE(REC_COUNT, ','):移除REC_COUNT中的千分位逗号,将格式化字符串转换为纯数字格式- 获取最新日期值:
- 方案1中
FIRST_VALUE(REC_COUNT) OVER (ORDER BY PREVIOUS_DAY DESC):按日期降序排序后,窗口函数会取第一行(最新日期)的REC_COUNT值,并自动广播到所有行 - 方案2中
ORDER BY PREVIOUS_DAY DESC LIMIT 1:直接筛选出最新日期的行,再通过CROSS JOIN将该值关联到原表每一行
- 方案1中
输入输出示例
输入表数据:
PREVIOUS_DAY REC_COUNT 2023-08-30 2,718 2023-08-29 2,713 2023-08-28 2,724 2023-08-24 2,723执行SQL后输出:
PREVIOUS_DAY REC_COUNT FINAL_CLMN 2023-08-30 2,718 2718 2023-08-29 2,713 2718 2023-08-28 2,724 2718 2023-08-24 2,723 2718
内容的提问来源于stack exchange,提问作者Naveen Srikanth
相关产品推荐
相关产品推荐

