如何在Snowflake中计算同一ID的当月对应上月值及月份
在Snowflake中关联同一ID的上月数据
需求说明
原表包含ID、Current_Month、Current_Value三个字段,示例数据如下:
| ID | Current_Month | Current_Value |
|---|---|---|
| 10 | 4 | 5678 |
| 10 | 5 | 1234 |
| 10 | 6 | 9876 |
需要生成包含ID、Previous_Month、Current_month、Previous_month_value、current_month_Value的结果表,展示同一ID对应的上月月份及数值,期望结果:
| ID | Previous_Month | Current_month | Previous_month_value | current_month_Value |
|---|---|---|---|---|
| 10 | 4 | 5 | 5678 | 1234 |
| 10 | 5 | 6 | 1234 | 9876 |
实现方案
使用Snowflake支持的窗口函数LAG(),按ID分区、Current_Month升序排序,获取每个记录的上一行数据:
SELECT ID, LAG(Current_Month) OVER (PARTITION BY ID ORDER BY Current_Month) AS Previous_Month, Current_Month AS Current_month, LAG(Current_Value) OVER (PARTITION BY ID ORDER BY Current_Month) AS Previous_month_value, Current_Value AS current_month_Value FROM 你的表名 QUALIFY Previous_Month IS NOT NULL; -- 过滤掉无上月数据的首行记录
代码解释
PARTITION BY ID:限定仅在同一ID的范围内匹配上月数据ORDER BY Current_Month:按月份升序排列,确保LAG()取到的是前一个月的有效记录QUALIFY Previous_Month IS NOT NULL:过滤每个ID的第一条无上月数据的记录,与期望结果保持一致
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

