【发布时间】:2013-11-17 15:16:52
【问题描述】:
所以让我描述一下我想在这里计算什么。我有 2 个表,在第一个称为余额的表上,每个帐户都有一行及其相应的当前余额。在第二个表上,我有这些帐户的所有存款和取款以及这些存款和取款的确切日期时间发生。我的问题是根据这两张表计算每天所有账户的余额。
1.表余额
|account_id| balance |
|1111 | 1000 |
|2222 | 3500 |
|3333 | 10000 |
2.表信用
account_id| date |deposit_withdrawal|
|1111 |2012-11-11 12:35:02| 250 |
|1111 |2012-11-12 18:15:34| 750 |
|1111 |2012-11-12 09:09:04| -150 |
|2222 |2012-01-12 10:05:04| 1000 |
|2222 |2012-07-15 14:23:04| -340 |
|2222 |2012-12-29 13:01:04| 450 |
我从信用表中选择账户,获取他们的存款取款总和,然后按 DAYOFYEAR 对其进行分组。现在我被困住了,我无法弄清楚如何计算他们在每个日期的余额。正如我上面提到的,余额表包含账户的当前余额。因此 deposit_withdrawal 表中的最新条目已经记入 balance 表中。
SELECT c.account_id , c.date , SUM(c.deposit_withdrawal) FROM credit c
JOIN balance b on b.account_id = c.account_id
GROUP by DAYOFYEAR (c.date)
ORDER BY DAYOFYEAR(c.date) DESC
编辑:谢谢大家的回复,让我再解释一下,假设我们有一个当前余额为 2000 的帐户。在表中他有 3 个条目,1 于 2012 年 10 月 10 日提款300 , 2012 年 11 月 11 日的 1 次,存款 400 和最后一次和最近的一次在 2013 年 2 月 29 日,存款 150。我想做的是找到他之间所有日期的余额2013 年 2 月 29 日和 2012 年 10 月 9 日。我知道在 2013 年 2 月 29 日,这是最近一次,他的余额等于他当前的余额 = 2000。所以前一天,在 2013 年 2 月 28 日,我知道他的余额将是当前余额(2000 年)-最后一次存款 (150) = 1850。直到 2012-11-11 他的余额没有变化。在 2012-11-11 他已经存款 400 ,所以前一天在 2012-11-10 他的余额将是 1850-400 = 1450 等等。
【问题讨论】:
-
为什么一定要JOIN这两个?每天的余额不会等于总余额
-
“每天所有账户的余额” 这个问题的解决方案是
SELECT SUM(balance) FROM balance,所以我想你没有正确地问你的问题。我不知道您的预期最终结果是什么。 -
我已经编辑了帖子并添加了更新。有人吗?
标签: mysql