MySQL使用多个表中的数字进行多次求和

MySQL使用多个表中的数字进行多次求和,mysql,Mysql,假设我有两个表,一个存储帐户,一个存储事务: id acct_name opening_bal 1 checking 1029.99 2 savings 2002.19 ... 及 例如,交易表第99行表示,12.15已于2018年1月21日从支票转移到储蓄 我想写一个查询,返回给定日期(如今天或2018年10月12日等)的所有账户及其余额,如下所示: acct balance checking 1599.21 savings 2

假设我有两个表,一个存储帐户,一个存储事务:

id   acct_name   opening_bal
1    checking    1029.99
2    savings     2002.19
... 

例如,交易表第99行表示,12.15已于2018年1月21日从支票转移到储蓄

我想写一个查询,返回给定日期(如今天或2018年10月12日等)的所有账户及其余额,如下所示:

acct        balance
checking    1599.21
savings     2221.99
...
我将如何编写这样一个查询

编辑:这里有一个解决方案,它非常接近我想要的,它只是有一个额外的id列。您可以将CURDATE替换为任意日期,以获取该日期对应的余额表

SELECT id, acct_name, opening_bal+amt-amt2 as balance FROM accounts 
  INNER JOIN    
    (SELECT to_acct, sum(amount) AS amt 
     FROM transactions
     WHERE date <= CURDATE() 
     GROUP BY to_acct) as T2   
    ON accounts.id=T2.to_acct 
  INNER JOIN    
    (SELECT from_acct, sum(amount) AS amt2 
     FROM transactions 
     WHERE date <= CURDATE()
     GROUP BY from_acct) as T3   
    ON T2.to_acct = T3.from_acct 
  ;

像这样的。若你们提供更多的数据,答案可能会更准确。表1是您的第一张表,表2是第二张表

select acct_name as acct,
opening_bal - t1.put_money + t2.get_money as balance
from Table1
left join (select from_acct, ifnull(sum(amount),0) as put_money from Table2 group by from_acct) t1
on t1.from_acct = Table1.id
left join (select to_acct, ifnull(sum(amount),0) as get_money from Table2 group by to_acct) t2
on t2.to_acct = Table1.id;

你的问题很清楚,但请补充你已经尝试过的问题,以及它们以何种方式不起作用;这有助于其他人了解他们应该为自己的答案提供多少解释,并有助于其他人将答案集中在您没有尝试过的事情上,和/或建议调整您已经做的事情将accounts表与from_acct中id上的transactions表连接起来,到账户。将期初余额添加到转入金额和转出金额的负数之和。
select acct_name as acct,
opening_bal - t1.put_money + t2.get_money as balance
from Table1
left join (select from_acct, ifnull(sum(amount),0) as put_money from Table2 group by from_acct) t1
on t1.from_acct = Table1.id
left join (select to_acct, ifnull(sum(amount),0) as get_money from Table2 group by to_acct) t2
on t2.to_acct = Table1.id;