You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Snowflake中基于每行动态日期条件添加客户统计列

Snowflake中计算动态52周窗口内的唯一客户数

要实现对每一行week_ending日期,统计其往前52周至该日期区间内的唯一客户数量,可以采用以下两种方案:

方案1:关联子查询(精确计数)

逻辑直观,适合数据量中等的场景,对每个日期单独查询对应窗口内的唯一客户数:

SELECT 
    t.week_ending,
    t.sales,
    (SELECT COUNT(DISTINCT customer_id) 
     FROM your_table sub
     WHERE sub.week_ending BETWEEN DATEADD(WEEK, -52, t.week_ending) 
                               AND t.week_ending) AS last_year_cust_count
FROM your_table t
WHERE t.year = 2022
ORDER BY t.week_ending;

方案2:窗口函数(近似/高效计数)

如果业务允许近似结果,使用Snowflake的APPROX_COUNT_DISTINCT窗口函数可以获得更好的性能,尤其适合大数据量场景:

SELECT 
    week_ending,
    sales,
    APPROX_COUNT_DISTINCT(customer_id) OVER (
        ORDER BY week_ending
        RANGE BETWEEN INTERVAL '52 weeks' PRECEDING AND CURRENT ROW
    ) AS last_year_cust_count
FROM your_table
WHERE year = 2022
ORDER BY week_ending;

注意事项

  • 替换代码中的your_table为实际表名,customer_id为表中唯一标识客户的字段;
  • 确保week_ending字段为日期类型,DATEADD函数的计算逻辑符合业务对“52周区间”的定义;
  • 若必须精确计数且数据量极大,可考虑预先按周聚合客户数据,再通过窗口函数累加去重(需结合更复杂的逻辑处理重复客户)。

内容的提问来源于stack exchange,提问作者Nisar_Haq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:35:16