我正试图在每一行的金额之间取得平衡。基本上需要加上或减去前一个记录字段的值。
表:
+------+------------+---------+---------+
| id | expiration | amount | is_paid |
+------+------------+---------+---------+
| 4 | 2014-09-02 | 100.00 | 1 |
| 10 | 2014-09-03 | 200.00 | 1 |
| 35 | 2014-09-03 | 10.32 | 0 |
| 2 | 2014-09-03 | -32.00 | 1 |
| 1 | 2014-09-04 | -50.00 | 0 |
| 200 | 2014-09-04 | 400.00 | 1 |
| 30 | 2014-09-05 | 100.00 | 1 |
+------+------------+---------+---------+
我想创建一个VIEW,以便在设置为is_paid = 1且在到期日期之间的字段中计算余额。 例如:
+------+------------+---------+---------+---------+
| id | expiration | amount | is_paid | balance |
+------+------------+---------+---------+---------+
| 4 | 2014-09-02 | 100.00 | 1 | 100.00 |
| 10 | 2014-09-03 | 200.00 | 1 | 300.00 |
| 35 | 2014-09-03 | 10.32 | 0 | 300.00 |
| 2 | 2014-09-03 | -30.00 | 1 | 270.00 |
| 1 | 2014-09-04 | -50.00 | 0 | 270.00 |
| 200 | 2014-09-04 | 400.00 | 1 | 670.00 |
| 30 | 2014-09-05 | 100.00 | 1 | 770.00 |
+------+------------+---------+---------+---------+
帮助我!!
答案 0 :(得分:3)
为什么需要将它放入视图中?这是将为您计算的选择
SELECT * ,
@a := if(is_paid = 1, @a + amount, @a) as balance
FROM table
CROSS JOIN(SELECT @a := 0)t
这是一个如何运作的细分......
从表中提取您想要的内容,还包括一个名为balance的新列。
这里的余额是前一行的余额加上当前的金额,如果它被标记为付费is_paid
...但是如果它没有支付那么它只是重复余额。
if (condition, true / then, false / else)
所以如果是is_paid,那么用当前的余额添加前一个余额(@a包含前一行余额,直到你用下一行的if语句重置它)如果没有付款那么只需重复@a余额
希望有用