创建数据库视图,其中每一行都取上一个的值

时间:2018-11-15 07:49:29

标签: mysql sql

我有一个这样的数据库表(省略了其他列)

videojs('videoPlayer', {
            controlBar: {
                fullscreenToggle: false
            }
        });

我想从显示此内容的表中创建一个数据库视图

date          | change

2018/10/10    |  +8
2018/10/31    |  -5
2018/11/01    |  +3
2018/11/03    |  -2

累计量,即前一个条目的累计量(按日期排序)加上/减去当前条目的变化量

是否存在一种便宜的方法(就计算而言)可以创建这种视图?

2 个答案:

答案 0 :(得分:0)

尝试此查询。

SELECT t1.Date, t1.Change, SUM(t2.Change) AS Cumalative
FROM YourTable t1
INNER JOIN YourTable t2 on t1.Date >= t2.Date
GROUP BY t1.Date, t1.Change
ORDER BY t1.Date

答案 1 :(得分:0)

在MySQL 8+中,您可以执行以下操作:

select t.*,
       sum(change) over (order by date) as cumulative
from t;

在早期版本中,我建议使用相关子查询:

select t.*,
       (select sum(t2.change) from t t2 where t2.date <= t.date) as cumulative
from t;

这将在视图中起作用,并且可以利用(date, change)上的索引。

此版本可能不如在旧版本的MySQL中使用变量有效,但它应该比join / group by解决方案要好。