开发者社区 问答 正文

mysql下,这个SQL应该怎么写?:报错

我有两张表
A表:
用户     存款  日期
admin  1000  2014-01-01
admin  1500  2014-01-05

B表
用户    取款  日期
admin  750  2014-01-03
admin  420  2014-01-07

现在想用一句SQL达成以下结果:
用户    事件类型 金额   余额  日期
admin  存款      1000  1000  2014-01-01
admin  取款      750    250   2014-01-03
admin  存款      1500  1750  2014-01-05
admin  取款      420    1330  2014-01-07

请教各位大神 这个SQL应该怎么写?

-**--*-

展开
收起
kun坤 2020-06-09 23:27:55 570 分享 版权
1 条回答
写回答
取消 提交回答
  • 先两个表join  在order by time

    select * from (select * from A union select * from B) as C order by time asc;

    A表和B表字段数目要相同,SQL未测试

    ######回复 @神州浪子 : 是的,开始没看到余额,这余额好像没办法直接搞出来,要是把余额单独建一次表,每次操作后把余额计算对应存进去,不知道行不行得通######谢谢,思路很好,只是后面的余额计算很麻烦######

    第一,你错在把存取款放在俩表里。

    第二,你这两个表里总得有个 account id 吧,这样才能 join 啊

    哎,

    ######刚看了下 原来的表是有关联id的。。 现在更改了 麻烦帮忙看看能解决么######我也不知道是哪个混蛋设计的表。。。 假设有ID,这个SQL应该怎么写呢?######

    select u,'存款',金额,时间 , ((select sum(存款金额) from a as a1 where a1.时间 <= a.时间) -(select sum(取款金额) from b as b1 where b1.时间 <= a.时间)) as 余额 from a

    uniun 

    select u,'取款',金额,时间 , ((select sum(存款金额) from a as a1 where a1.时间 <= b.时间) -(select sum(取款金额) from b as b1 where b1.时间 <= b.时间)) as 余额 from b

    仅供参考..

    ######用日期和存款、取款分组,sum(存款)—sum(取款),两表用用户关联######写一个存储过程将b表插入a表如何?取款字段为负######

    会用窗口函数一点都不麻烦,不过MYSQL好像没有这个武器


    ######一个查询,结果OK SELECT c.* ,(SELECT sum(d.e) FROM (SELECT a.date,a.money as e FROM a UNION SELECT b.date,-b.money as e FROM b) as d WHERE d.date <= c.date) as '余额' FROM (SELECT * FROM a UNION SELECT * FROM b) as c ORDER BY c.date;######应该就一个表,存取用不同的标识才好嘛
    2020-06-10 09:34:22
    赞同 展开评论