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

如何在Snowflake中按每条记录的自定义日期范围计算聚合求和

在Snowflake中计算指定日期范围内的产品总销量

需求说明

现有两张表:

  • Table_A:包含Product、start_date、end_date字段,存储各产品对应的日期范围
  • Table_B:包含Product、date_sold、quantity_sold字段,存储产品的销售记录

需要计算Table_A每条记录对应的产品在其指定日期范围内的总销量,最终结果包含Table_A所有原字段及新增的total_sales字段。

解决方案SQL

SELECT
    a.Product,
    a.start_date,
    a.end_date,
    COALESCE(SUM(b.quantity_sold), 0) AS total_sales
FROM Table_A a
LEFT JOIN Table_B b
    ON a.Product = b.Product
    AND b.date_sold BETWEEN a.start_date AND a.end_date
GROUP BY a.Product, a.start_date, a.end_date
ORDER BY a.Product, a.start_date;

逻辑说明

  • 用左连接(LEFT JOIN)确保Table_A的每条记录都能保留在结果中,哪怕对应日期区间内该产品没有销售记录
  • 通过b.date_sold BETWEEN a.start_date AND a.end_date筛选出属于当前Table_A记录日期范围内的销售数据
  • 用SUM(b.quantity_sold)计算总销量,搭配COALESCE将无销售时的空值(NULL)转换为0,避免结果出现空值
  • 按Table_A的三个字段分组,保证每条原记录对应唯一的汇总结果,排序让结果更易读

注意事项

  • 如果date_sold是带时间戳的类型(比如TIMESTAMP),而start_date/end_date是纯日期类型,Snowflake会自动做类型转换,但更稳妥的方式是用DATE(b.date_sold)来匹配日期范围,避免时间部分影响筛选
  • 若Table_A中同一产品存在多个不重叠或重叠的日期范围,该SQL会分别计算每个范围的销量,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:12:11