Mysql 显示出适当的平衡
我有一个查询,我想显示借方、贷方和余额。表中没有余额栏。我从借方和贷方计算余额 我试图创建一个余额列,在其中存储余额并从表中显示它。但是,如果我更新或删除任何行,余额将不正确 我发现下面的代码就这样。但当一个日期只有一行,而一个日期有多个列不能正常工作时,它就起作用了。它逐日显示余额,我想逐行显示余额 MySQL 但我想要这样的结果:Mysql 显示出适当的平衡,mysql,Mysql,我有一个查询,我想显示借方、贷方和余额。表中没有余额栏。我从借方和贷方计算余额 我试图创建一个余额列,在其中存储余额并从表中显示它。但是,如果我更新或删除任何行,余额将不正确 我发现下面的代码就这样。但当一个日期只有一行,而一个日期有多个列不能正常工作时,它就起作用了。它逐日显示余额,我想逐行显示余额 MySQL 但我想要这样的结果: Date Debit Credit Balance 2016-11-27 0 2000 2000 201
Date Debit Credit Balance
2016-11-27 0 2000 2000
2016-12-02 0 500000 585000 //same result for date 2016-12-02
2016-12-02 15000 0 585000 //same result for date 2016-12-02
2016-12-02 0 100000 585000 //same result for date 2016-12-02
2016-12-03 1200 0 583800
2016-12-04 3160 0 580540 //same result for date 2016-12-04
2016-12-04 100 0 580540 //same result for date 2016-12-04
2016-12-05 30 0 580510
2016-12-06 0 150 580660
Date Debit Credit Balance
2016-11-27 0 2000 2000
2016-12-02 0 500000 502000
2016-12-02 15000 0 487000
2016-12-02 0 100000 587000
2016-12-03 1200 0 585800
2016-12-04 3160 0 582640
2016-12-04 100 0 582540
2016-12-05 30 0 582510
2016-12-06 0 150 582660
您可以像这样在“选择零件”中使用子查询
SELECT
m.`id`,
m.`date`,
m.`credit`,
m.`debit`,
(select sum(n.`credit`) - sum(n.`debit`)
from `cash_book` n
where n.`id` = m.`id`
and n.`date` <= m.`date`) balance
FROM `cash_book` m
WHERE `customer_id` = 1
ORDER BY m.`date` ASC
在查询中使用了JOIN,它将用于联接两个或多个表。这里您只使用一张桌子。因此,在查询中不需要连接 您可以使用以下简单查询
SELECT
m.id,
m.date,
m.credit,
m.debit,
(SELECT SUM(credit)-SUM(debit)
FROM`cash_book` A
WHERE A.date<=m.Date)
FROM `cash_book` m WHERE m.customer_id = 1 ORDER BY m.Date ASC
请尝试此查询
select s.Date,s.Debit,s.credit,ABS(@b := @b + s.debit - s.credit) as balance from (select @b:= 0.0) as dummy cross join cash_book as s order by ID;
这就是你要找的吗
SELECT
`id`,
`date`,
`credit`,
`debit`,
@balance := @balance + credit-debit AS balance
FROM `cash_book`
CROSS JOIN ( SELECT @balance := 0) as init
ORDER BY `date` ASC ;
样品
请同时提供数据,以便为您提供解决方案。您的表还有一个唯一的id字段吗?@BerndBuffen是的。我有唯一的id字段。@kapil.dev我已经发布了显示一天余额的输出结果。@smartrahat-尝试以下操作:在t.date 1054更改t-字段列表中的未知列“t.credit”我应该在查询中使用此子查询吗?抱歉,修正了它。查询是用它自己的行计算的。它不会给你正确的结果吗?我需要客户金融交易的余额。因此,客户的上一笔交易也应该进行计算。查询使用自己的行进行计算。是的,但输出将是相同的,希望您这里没有JOINYah,不需要JoinI需要客户金融交易的余额。因此,客户的上一笔交易也应该计算。是的!这正是我要找的。非常感谢你。谢谢大家的帮助。
SELECT
`id`,
`date`,
`credit`,
`debit`,
@balance := @balance + credit-debit AS balance
FROM `cash_book`
CROSS JOIN ( SELECT @balance := 0) as init
ORDER BY `date` ASC ;
mysql> SELECT * FROM cash_book;
+------+------------+-------+--------+
| id | date | debit | credit |
+------+------------+-------+--------+
| 1 | 2016-11-27 | 0 | 2000 |
| 2 | 2016-12-04 | 3160 | 0 |
| 3 | 2016-12-02 | 15000 | 0 |
| 4 | 2016-12-03 | 1200 | 0 |
| 5 | 2016-12-05 | 30 | 0 |
| 6 | 2016-11-29 | 0 | 10000 |
| 7 | 2016-01-05 | 0 | 0 |
| 8 | 2016-12-01 | 2000 | 0 |
| 9 | 2016-11-29 | 10000 | 0 |
| 10 | 2016-12-02 | 2000 | 100000 |
| 11 | 2016-12-06 | 2000 | 150 |
| 12 | 2016-12-02 | 2000 | 500000 |
+------+------------+-------+--------+
12 rows in set (0,00 sec)
mysql> SELECT
-> `id`,
-> `date`,
-> `credit`,
-> `debit`,
-> @balance := @balance + credit-debit AS balance
-> FROM `cash_book`
-> CROSS JOIN ( SELECT @balance := 0) as init
-> ORDER BY `date` ASC ;
+------+------------+--------+-------+---------+
| id | date | credit | debit | balance |
+------+------------+--------+-------+---------+
| 7 | 2016-01-05 | 0 | 0 | 0 |
| 1 | 2016-11-27 | 2000 | 0 | 2000 |
| 6 | 2016-11-29 | 10000 | 0 | 12000 |
| 9 | 2016-11-29 | 0 | 10000 | 2000 |
| 8 | 2016-12-01 | 0 | 2000 | 0 |
| 3 | 2016-12-02 | 0 | 15000 | -15000 |
| 10 | 2016-12-02 | 100000 | 2000 | 83000 |
| 12 | 2016-12-02 | 500000 | 2000 | 581000 |
| 4 | 2016-12-03 | 0 | 1200 | 579800 |
| 2 | 2016-12-04 | 0 | 3160 | 576640 |
| 5 | 2016-12-05 | 0 | 30 | 576610 |
| 11 | 2016-12-06 | 150 | 2000 | 574760 |
+------+------------+--------+-------+---------+
12 rows in set (0,00 sec)
mysql>