按资金变化顺序计算每日余额,求解法?

发布于 2022-09-05 20:50:43 字数 1767 浏览 18 评论 0

有一张客户资金变化表(change),它记录每天(bizdate)每笔交易导致的客户(cust)资金变化(change)及变化后的资金余额(balance)。

|------+---------+--------+---------|
| cust | bizdate | change | balance |
|------+---------+--------+---------|
| A    | Sep 4   |     25 |     100 |
| B    | Sep 5   |    100 |      90 |
| B    | Sep 5   |    -20 |     -10 |
| B    | Sep 4   |    -40 |      10 |
| A    | Sep 5   |     10 |      80 |
| A    | Sep 4   |    -30 |      70 |
|------+---------+--------+---------|

同一位客户每天可以有多行交易记录,而且行的顺序是不确定的。上表实际的发生顺序应该是:

|------+---------+--------+---------|
| cust | bizdate | change | balance |
|------+---------+--------+---------|
| A    | Sep 4   |     25 |     100 |
| A    | Sep 4   |    -30 |      70 |
| A    | Sep 5   |     10 |      80 |
| B    | Sep 4   |    -40 |      10 |
| B    | Sep 5   |    -20 |     -10 |
| B    | Sep 5   |    100 |      90 |
|------+---------+--------+---------|

也就是说changebalance存在一个因果关系。现在想要统计客户每天的资金余额(daily_balance):

|------+---------+---------|
| cust | bizdate | balance |
|------+---------+---------|
| A    | Sep 4   |      70 |
| A    | Sep 5   |      80 |
| B    | Sep 4   |      10 |
| B    | Sep 5   |      90 |
|------+---------+---------|

怎样写SQL才能达到目的?

注意有可能出现无法判断先后顺序的情况:

|------+---------+--------+---------|
| cust | bizdate | change | balance |
|------+---------+--------+---------|
| A    | Sep 6   |     10 |     100 |
| A    | Sep 6   |    -10 |      90 |
|------+---------+--------+---------|

我也没想好怎么处理。实际中还没有遇到。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瀞厅☆埖开 2022-09-12 20:50:45

这个从逻辑是无解
建议在数据库上面增加一个插入时间的字段,默认成当前时间就行,这样就能判断出客户当天最后一笔的交易记录,余额自然就清楚了。

如果不想改原表结构,可以考虑触发器的机制,每次插入新纪录时更新客户在交易日的余额表。

扮仙女 2022-09-12 20:50:45

这业务逻辑,只能根据资金变化逻辑去判断先后顺序,并且仍然可能不准确,即使做出精确判断也是效率极其低下,本来设置一个精确时间字段或者一个序列号就可以解决的问题,完全是舍本逐末!差评!

情绪失控 2022-09-12 20:50:45

这数据结构设计的很让人无语,没有时间记录行为,处理起来很痛苦

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文