mysql - 用于计算开仓当前余额的 SQL 查询

标签 mysql sql

我需要你帮我做一个 sql 查询来计算余额。 请查看我下面的表格。 “opening”仅在第一次计算时使用。

非常感谢

这是我的 table

trx_no  Opening  debit  credit
ab123   200      0      100
ab456   200      0      50
ab789   200      0      50
cd123   200      50     0
cd456   200      0      10
cd789   200      0      40

这是预期的结果

trx_no  Opening  debit  credit    balance
ab123   200      0      100       300
ab456   200      0      50        350 
ab789   200      0      50        400
cd123   200      50     0         350
cd456   200      0      10        360
cd789   200      0      40        400

最佳答案

假设您的 trx_no始终为 5 个字符的固定宽度,并且字典排序指示事务的年龄,那么我们可以尝试使用相关的此处的子查询查找滚动余额:

SELECT
    trx_no,
    Opening,
    debit,
    credit,
    Opening + (SELECT SUM(t2.credit - t2.debit)
               FROM yourTable t2
               WHERE t2.trx_no <= t1.trx_no) AS balance
FROM yourTable t1
ORDER BY
    trx_no;

如果您使用的是 MySQL 8+,那么窗口函数可以让这变得不那么冗长:

SELECT
    trx_no,
    Opening,
    debit,
    credit,
    Opening +
        SUM(credit - debit) OVER (OVER ORDER BY trx_no) AS balance
FROM yourTable t1
ORDER BY
    trx_no;

关于mysql - 用于计算开仓当前余额的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58095683/

相关文章:

sql - 如何判断在 Oracle 事务中是否有未提交的工作?

java - 如何在jsp中设置数据源?

php - mysql php用价格分组开始日期和结束日期

mysql - MySQL IF() 中要做的两件事

具有相同ID的多行之间的SQL差异

sql - T-SQL 中的 XPath 选择实体

ios - 如何访问 Parse 数据库中的指针值

java - 在 Java 中从 mySQL 数据库创建 "INSERT"语句

php - mysql查询运行缓慢

php - 如何在 While 语句中运行 While 语句以从数据库中获取值?