首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将期初余额添加到MySQL中的第一个结束余额行

将期初余额添加到MySQL中的第一个结束余额行
EN

Stack Overflow用户
提问于 2015-05-27 20:20:30
回答 1查看 1.4K关注 0票数 1

我有一个MySQL表,在表中显示借方、贷方和余额。我已将以下定义、示例数据和代码加载到SQL Fiddle

代码语言:javascript
复制
CREATE TABLE chequebook (
  entry_date timestamp default now() PRIMARY KEY,
  entry_item varchar(48) NOT NULL DEFAULT '',
  entry_amount decimal(10,2) NOT NULL DEFAULT 0.00
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO chequebook (entry_date,entry_item,entry_amount) VALUES 
('2010-01-02 12:34:00','Deposit A',215.56),
('2010-01-02 21:44:00','Withdrawal A' ,-23.34),
('2010-01-03 10:44:00','Withdrawal B',-150.15),
('2010-01-03 15:44:00','Deposit B',154.67),
('2010-01-04 18:44:00','Withdrawal C',-65.09),
('2010-01-05 08:44:00','Withdrawal D',-74.23),
('2010-01-06 14:44:00','Deposit C',325.12),
('2010-01-06 20:44:00','Withdrawal E',-80.12),
('2010-01-07 04:44:00','Withdrawal F',-110.34),
('2010-01-07 16:44:00','Withdrawal G',-150.25),
('2010-01-08 16:44:00','Withdrawal H',-23.90),
('2010-01-08 21:44:00','Withdrawal I',-75.66),
('2010-01-08 22:44:00','Deposit C',275.78),
('2010-01-09 11:44:00','Withdrawal K',-85.99),
('2010-01-09 21:44:00','Withdrawal J',-100.00); 

set @depos=0;
set @total=0;
select 
  entry_date, 
  entry_item, 
  entry_amount, 
  if( entry_amount>0, @depos:=entry_amount, @depos:=@depos+entry_amount ) as depos_bal,
  @total:=@total+entry_amount as net_bal
from chequebook
order by entry_date; 

当我想从PHP查询中向net_bal列添加一个开放余额时,我将面临一些问题。

我面临的问题是,在第一栏中添加期初余额,在第一栏之后,应该从所需字段中减去或加上。

例如:

代码语言:javascript
复制
|                entry_date |   entry_item | entry_amount | depos_bal | net_bal |
|---------------------------|--------------|--------------|-----------|---------|
| January, 02 2010 12:34:00 |    Deposit A |       215.56 |   5215.56 | 5215.56 | <--- 5000 is openingbalance
| January, 02 2010 21:44:00 | Withdrawal A |       -23.34 |   5192.22 | 5192.22 |
| January, 03 2010 10:44:00 | Withdrawal B |      -150.15 |   5042.07 | 5042.07 |

开口平衡是从不同的桌子上取来的。

我怎么能完成这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-27 20:27:06

您可以将初始局部变量@Total变量设置为初始余额。来自您的SQLFiddle:

代码语言:javascript
复制
set @depos=0;
set @total=5000;
select 
  entry_date, 
  entry_item, 
  entry_amount, 
  if( entry_amount>0, @depos:=entry_amount, @depos:=@depos+entry_amount ) as depos_bal,
  @total:=@total+entry_amount as net_bal from chequebook
order by entry_date; 

如果它来自不同的查询,请按此方式设置变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30492387

复制
相关文章

相似问题

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