实现每两行求和
SELECT
DATE,
total,
SUM(total) OVER (
ORDER BY DATE
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
) AS two_day_sum
FROM subquery
ORDER BY DATE;
SUM(total): 这表示我们正在计算总和。total 是前面查询中每一行的报警数量列的名称。
OVER: 这表示我们正在执行一个窗口函数。
ORDER BY DATE: 这表示我们希望按照日期列进行排序。
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW: 这指定了窗口的范围。1 PRECEDING 表示当前行的前一行,CURRENT ROW 表示当前行。因此,这个窗口的范围是当前行以及前一行,也就是每两天的总和。
以一个例子来说明这个语句。假设我们有如下数据:
DATE | total |
---|---|
07-01 | 10 |
07-02 | 5 |
07-03 | 7 |
07-04 | 8 |
07-05 | 4 |
使用上述语句后,我们将得到如下计算结果:
DATE | total | two_day_sum |
---|---|---|
07-01 | 10 | 10 |
07-02 | 5 | 15 (10+5) |
07-03 | 7 | 12 (5+7) |
07-04 | 8 | 15 (7+8) |
07-05 | 4 | 12 (8+4) |
可以看出,two_day_sum 列为每两天的总和,每一行的值是当前行以及前一行的报警数量的总和。