首页 > 解决方案 > 创建数据库视图,其中每一行从前一行获取值

问题描述

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

date          | change

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

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

date          | change  | cumulative
2018/10/10    |  +8     |  8
2018/10/31    |  -5     |  3
2018/11/01    |  +3     |  6
2018/11/03    |  -2     |  4

累积值,即先前条目的累积值(按日期排序)加/减当前条目的变化

有没有一种便宜的方法(在计算方面)可以创建这样的视图?

标签: mysqlsql

解决方案


在 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解决方案更好。


推荐阅读