【问题标题】:How do I create a column that gives the sum of all rows within 5 minutes previous of a given rows timestamp in DB2 SQL?如何在 DB2 SQL 中创建一个给出给定行时间戳之前 5 分钟内所有行总和的列?
【发布时间】:2021-06-17 20:19:45
【问题描述】:

我正在尝试对在任何给定行的时间戳之前 5 分钟内具有时间戳的行求和。我面临的问题是,前 5 分钟内没有预定义的行数,从初始时间戳开始计算 5 分钟间隔不会给出预期的结果。

下表显示了所需的输出:

TimeStamp Sales SUM_PREVIOUS_5_MINS_SALES
18:04:03 2 2
18:05:23 5 7
18:05:58 3 10
18:09:34 4 12

【问题讨论】:

    标签: sql sum db2


    【解决方案1】:

    一种方法使用窗口函数:

    select t.*,
           sum(sales) over (order by extract(epoch from timestamp)
                            range between 299 preceding and current row
                           ) as sales_prev_5_minutes
    from t;
    

    注意:299 = 5 * 60 - 1,即 5 分钟内的秒数(嗯,减一,因为包括当前行)。

    【讨论】:

    • Db2 不支持RANGE | ROWS 的组边界表达式。请参阅OLAP specificationgroup-bound1 描述。因此,您应该将 (5 * 60) -1 更改为 299 以使其在 Db2 中工作。
    • @MarkBarinstein 。 . .谢谢你。你知道为什么它不接受 constants 的表达式吗?这应该在编译阶段进行评估。
    • 我不知道。大概就是这样的实现吧。
    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多