运行 总计,但将前一行添加为常量而不是当前行
Running total but add previous row with a constant instead of current row
我有一个像下面这样的 table,带有一些初始值:
date
value
constant
2020-02-01
10
0.25
2020-03-01
0.25
2020-04-01
0.50
2020-05-01
0.25
2020-06-01
0
我正在寻找如下输出:
date
new_value
constant
2020-02-01
10
0.25
2020-03-01
10.25
0.25
2020-04-01
10.50
0.50
2020-05-01
11.0
0.25
2020-06-01
11.25
0
这就像 运行 总数,但我不想添加前一行值,而是添加另一列中的值。知道如何实现吗?
在 MySQL 8+ 上,我们可以使用 SUM
:
来处理这个问题
SELECT
date,
SUM(value) OVER (ORDER BY date) +
SUM(constant) OVER (ORDER BY date
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS new_value,
constant
FROM yourTable
ORDER BY date;
您可以使用window函数sum
,如下所示:
select date,
sum(coalesce(value,0) + constant) over (order by date) as constant
from t;
我有一个像下面这样的 table,带有一些初始值:
date | value | constant |
---|---|---|
2020-02-01 | 10 | 0.25 |
2020-03-01 | 0.25 | |
2020-04-01 | 0.50 | |
2020-05-01 | 0.25 | |
2020-06-01 | 0 |
我正在寻找如下输出:
date | new_value | constant |
---|---|---|
2020-02-01 | 10 | 0.25 |
2020-03-01 | 10.25 | 0.25 |
2020-04-01 | 10.50 | 0.50 |
2020-05-01 | 11.0 | 0.25 |
2020-06-01 | 11.25 | 0 |
这就像 运行 总数,但我不想添加前一行值,而是添加另一列中的值。知道如何实现吗?
在 MySQL 8+ 上,我们可以使用 SUM
:
SELECT
date,
SUM(value) OVER (ORDER BY date) +
SUM(constant) OVER (ORDER BY date
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS new_value,
constant
FROM yourTable
ORDER BY date;
您可以使用window函数sum
,如下所示:
select date,
sum(coalesce(value,0) + constant) over (order by date) as constant
from t;