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

如何编写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:27:04