如何编写HIVE查询实现特定列按时间戳累加前序值到当前值
Hive 15分钟间隔累计销售额查询方案
实现逻辑
你需要的是按部门、产品分组后,按时间戳顺序计算累计销售额,之前PARTITION BY未生效的核心原因是窗口函数中未指定排序规则和窗口帧范围,导致无法按时间先后顺序累加。
完整查询语句
假设你的输入表名为sales_data,查询代码如下:
SELECT timestamp_, Dept_no, Product_no, SUM(Total_Sales) OVER ( PARTITION BY Dept_no, Product_no ORDER BY timestamp_ ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS Total_Sales FROM sales_data;
子句说明
PARTITION BY Dept_no, Product_no:将数据按部门、产品拆分成分组,不同分组的累计值独立计算ORDER BY timestamp_ ASC:每个分组内按时间戳升序排列,保证累加顺序严格遵循15分钟的时间先后ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:指定窗口范围为当前分组的第一行到当前行,求和结果就是到当前时间戳为止的累计销售额,完全符合「前序累加值+当前时段值」的计算逻辑
注意事项
如果存在同一部门、同一产品、同一时间戳有多条重复数据的情况,建议先做单时段聚合再执行累加,避免重复计算:
WITH per_period_agg AS ( SELECT timestamp_, Dept_no, Product_no, SUM(Total_Sales) AS period_sales FROM sales_data GROUP BY timestamp_, Dept_no, Product_no ) SELECT timestamp_, Dept_no, Product_no, SUM(period_sales) OVER ( PARTITION BY Dept_no, Product_no ORDER BY timestamp_ ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS Total_Sales FROM per_period_agg;
内容的提问来源于stack exchange,提问作者Shanti
相关产品推荐
相关产品推荐

