Snowflake查询中如何为数据表行计算生成过期日期字段
Snowflake 新增过期日期字段实现方案
你可以通过以下Snowflake函数组合实现需求,无需手动写循环逐行遍历,用窗口函数即可高效完成分组行号识别与条件赋值:
核心用到的函数
ROW_NUMBER()窗口函数:按指定字段分组后,给组内的行按排序规则分配连续的行号,用来识别组内的首行、第2、3行CASE WHEN/IFF()条件判断函数:根据行号匹配规则,给不同行赋值对应的过期日期- 窗口函数的
PARTITION BY子句:用来按首个字段(即存储ABCD的字段)分组,保证每组的行号独立计数 - 窗口函数的
ORDER BY子句:指定组内行的排序规则,确保行号顺序和你预期的首行、第2、3行顺序一致
示例代码
假设你的源表名为business_data,分组字段为first_col(存储ABCD的字段),组内行按id升序排序确定先后顺序,查询新增字段的代码如下:
SELECT *, CASE WHEN ROW_NUMBER() OVER(PARTITION BY first_col ORDER BY id ASC) = 1 THEN '2021-02-28'::DATE WHEN ROW_NUMBER() OVER(PARTITION BY first_col ORDER BY id ASC) IN (2,3) THEN '9999-01-01'::DATE END AS "Expiration date" FROM business_data;
如果需要把该字段持久化到表中,推荐用CTAS方式创建新表:
CREATE OR REPLACE TABLE business_data_new AS SELECT *, CASE WHEN ROW_NUMBER() OVER(PARTITION BY first_col ORDER BY id ASC) = 1 THEN '2021-02-28'::DATE WHEN ROW_NUMBER() OVER(PARTITION BY first_col ORDER BY id ASC) IN (2,3) THEN '9999-01-01'::DATE END AS "Expiration date" FROM business_data;
使用时注意替换表名、分组字段、排序字段为你实际业务对应的字段即可。
内容的提问来源于stack exchange,提问作者LKOMason
相关产品推荐
相关产品推荐

