如何使用SQL计算各产品最佳连续4周销售额及对应周区间
问题解决方法
实现思路
- 按产品分组,在每个产品内部按周升序排序,用滑动窗口计算最近4周(包含当前周)的累计销售额,窗口范围取
当前行 + 前3行即可覆盖所有连续4周的组合 - 对每个产品的所有连续4周组合,按累计销售额降序排序,取排名第一的组合即为最优
- 周区间直接由
当前周-3和当前周拼接得到,不需要额外用min/max聚合
参考SQL代码(支持所有支持标准窗口函数的引擎,如MySQL 8.0+、Spark SQL、Hive、PostgreSQL等)
WITH sliding_sales AS ( SELECT PRODUCT, WEEK AS end_week, WEEK - 3 AS start_week, SUM(SALES) OVER ( PARTITION BY PRODUCT ORDER BY WEEK ROWS BETWEEN 3 PRECEDING AND CURRENT ROW ) AS total_4w_sale FROM 你的表名 ) , ranked_sales AS ( SELECT PRODUCT, CONCAT(start_week, '-', end_week) AS BEST_4_WK, total_4w_sale AS BEST_4_WK_SALE, ROW_NUMBER() OVER (PARTITION BY PRODUCT ORDER BY total_4w_sale DESC) AS rn FROM sliding_sales -- 过滤不足4周的无效窗口 WHERE start_week >= 1 ) SELECT PRODUCT, BEST_4_WK, BEST_4_WK_SALE FROM ranked_sales WHERE rn = 1;
结果验证
用你提供的样例数据执行上述代码,输出结果和预期完全一致:
PRODUCT BEST_4_WK BEST_4_WK_SALE ICE 1-4 64 WATER 5-8 66 SODA 3-6 63
内容的提问来源于stack exchange,提问作者J..
相关产品推荐
相关产品推荐

