首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Amt1和Amt2值添加到上一记录的输出列值

将Amt1和Amt2值添加到上一记录的输出列值
EN

Stack Overflow用户
提问于 2019-07-10 05:22:18
回答 1查看 46关注 0票数 0

输入:

代码语言:javascript
复制
  dated    amount   Amt1    Amt2
1/1/2017    100      0      10
1/2/2017    100      10     0
1/4/2017    100      0      0
1/6/2017    100     300     10
1/10/2017   100     0       20
1/11/2017   100     350     650
1/12/2017   100     0       234

输出

代码语言:javascript
复制
dated       amount  Amt1    Amt2    Output Column
1/1/2017    100     0       10      100
1/2/2017    100     10      0       110
1/4/2017    100     0       0       120
1/6/2017    100     300     10      120
1/10/2017   100     0       20      430
1/11/2017   100     350     650     450
1/12/2017   100     0       234     1450

输出列是通过将Amt1和Amt2值添加到以前记录的输出列值来计算的。

示例:输出列

第一个记录是“金额”栏,

第二次记录将从输出列的第一记录值和第一记录的Amt1和Amt2,即100+0+10=110,

第三张唱片来自110+10+0=120

第四张唱片来自120+0+0=120

第五张唱片来自120+300+10=430 ..。

EN

回答 1

Stack Overflow用户

发布于 2019-07-10 06:48:25

在这个站点上,有很多如何计算运行总计的例子,这里有一个使用变量的例子。我担心“金额”列的用途没有定义,但此解决方案适用于mysql提供的低于版本8的数据(它将适用于version 8或更高版本,但有更好的方法)。@tcadidot0 0不需要硬编码。

代码语言:javascript
复制
drop table if exists t;
create table t
(  dated date,   amount int,   Amt1 int,   Amt2 int);
insert into t values
(str_to_date('1/1/2017','%d/%m/%Y')   , 100  ,    0   ,   10),
(str_to_date('1/2/2017','%d/%m/%Y')   , 100  ,    10  ,   0),
(str_to_date('1/4/2017','%d/%m/%Y')   , 100  ,    0   ,   0),
(str_to_date('1/6/2017','%d/%m/%Y')   , 100  ,   300  ,   10),
(str_to_date('1/10/2017','%d/%m/%Y')  , 100  ,   0    ,   20),
(str_to_date('1/11/2017','%d/%m/%Y')  , 100  ,   350  ,   650),
(str_to_date('1/12/2017','%d/%m/%Y')  , 100  ,   0    ,   234);

select t.dated,t.amount,t.amt1,t.amt2, 
         if(t.dated = (select min(t1.dated) from t t1),@op:=amount,
         @op:=@op + 
         (select amt1 + amt2 from t t1 where t1.dated < t.dated order by t1.dated desc limit 1) 
         ) op
from t 
cross join (select @op:=0) o
order by dated;

+------------+--------+------+------+------+
| dated      | amount | amt1 | amt2 | op   |
+------------+--------+------+------+------+
| 2017-01-01 |    100 |    0 |   10 |  100 |
| 2017-02-01 |    100 |   10 |    0 |  110 |
| 2017-04-01 |    100 |    0 |    0 |  120 |
| 2017-06-01 |    100 |  300 |   10 |  120 |
| 2017-10-01 |    100 |    0 |   20 |  430 |
| 2017-11-01 |    100 |  350 |  650 |  450 |
| 2017-12-01 |    100 |    0 |  234 | 1450 |
+------------+--------+------+------+------+
7 rows in set (0.00 sec)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56963879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档