Mysql 显示出适当的平衡

Mysql 显示出适当的平衡,mysql,Mysql,我有一个查询,我想显示借方、贷方和余额。表中没有余额栏。我从借方和贷方计算余额 我试图创建一个余额列,在其中存储余额并从表中显示它。但是,如果我更新或删除任何行,余额将不正确 我发现下面的代码就这样。但当一个日期只有一行,而一个日期有多个列不能正常工作时,它就起作用了。它逐日显示余额,我想逐行显示余额 MySQL 但我想要这样的结果: Date Debit Credit Balance 2016-11-27 0 2000 2000 201

我有一个查询,我想显示借方、贷方和余额。表中没有余额栏。我从借方和贷方计算余额

我试图创建一个余额列,在其中存储余额并从表中显示它。但是,如果我更新或删除任何行,余额将不正确

我发现下面的代码就这样。但当一个日期只有一行,而一个日期有多个列不能正常工作时,它就起作用了。它逐日显示余额,我想逐行显示余额

MySQL

但我想要这样的结果:

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>