有一张余额表,写一条sql,实时计算每一次收付金额时的余额

假设有一张表:

 CREATE TABLE `money_test` (
  `transaction_id` int(11) NOT NULL COMMENT '主键',
  `transaction_type` varchar(255) DEFAULT NULL COMMENT '收支方向(1:收入,2:支出)',
  `amount` varchar(255) DEFAULT NULL COMMENT '当前余额',
  `transaction_date` datetime DEFAULT NULL COMMENT '交易日期',
  PRIMARY KEY (`transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 实时计算每一次收付之后的金额:可以用下列sql来实现

SELECT 
    transaction_id,
    transaction_type,
    amount,
    transaction_date,
    @balance := @balance + (CASE 
                                WHEN transaction_type = '1' THEN amount
                                ELSE -amount
                        END) AS balance
FROM 
    test_table
CROSS JOIN 
    (SELECT @balance := 0) AS init
ORDER BY 
    transaction_date, transaction_id;

上面可能会有精度的缺失,用下面的这个更好

SELECT 
    receipt_pay_date,
    create_date,
    receipt_money,
    pay_money,
    CAST(@balance := @balance + (CASE 
								WHEN receipt_pay_type = '10' THEN receipt_money
								ELSE -pay_money
						END) AS DECIMAL(18, 6)) AS balance
FROM 
    test_table
CROSS JOIN 
    (SELECT @balance := 0) AS init
ORDER BY 
    receipt_pay_date, create_date

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值