mysql - 创建数据库视图,其中每一行从前一行获取值
问题描述
我有一个这样的数据库表(省略其他列)
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
累积值,即先前条目的累积值(按日期排序)加/减当前条目的变化
有没有一种便宜的方法(在计算方面)可以创建这样的视图?
解决方案
在 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
解决方案更好。
推荐阅读
- java - 使用递归在堆栈中搜索的方法
- c# - 如何为将用户发送到 Xamarin 页面底部的按钮创建 onClick 方法?
- python - Python请求json,使json响应看起来更好
- r - 随时间合并到数据框
- html - 将 SVG 路径转换为字形路径
- sql-server - 重新安装实例 Microsoft SQL Server 2019
- python - Apache Beam CombinePerKey(sum) 没有正确求和
- python - PySpark - Json 爆炸嵌套结构和结构数组
- javascript - Angular 发布到外部服务器,在 iframe 中显示结果
- javascript - 如何在浏览器刷新时保存计数计时器?