【问题标题】:MySql: Summing the latest amounts banked for each category and typeMySql:汇总每个类别和类型的最新银行金额
【发布时间】:2013-10-24 05:02:44
【问题描述】:

我有四个 MySql 表(这里简化):

表 1:派系(仅供参考)

id | name
 1 | FactionName1
 2 | FactionName2

表 2:货币(仅供参考)

id | name
 1 | Currency1
 2 | Currency2
 3 | Currency3

表 3:事件(仅供参考)

id | name   | date
 1 | Evebt1 | 2013-10-16
 2 | Event2 | 2013-10-18 (Note: date out of order)
 3 | Event3 | 2013-10-17

表4:event_banking(每个事件后输入的数据,每个组的每种货币的剩余金额)

id | faction_id | currency_id | event_id | amount
 1 |          1 |           1 |        1 |     10
 2 |          1 |           1 |        2 |     20
 3 |          1 |           1 |        3 |     30
 4 |          1 |           2 |        1 |     40
 5 |          1 |           2 |        2 |     50
 6 |          1 |           2 |        3 |     60
 7 |          1 |           3 |        1 |     70
 8 |          1 |           3 |        2 |     80
 9 |          1 |           3 |        3 |     90
10 |          2 |           1 |        1 |    100
11 |          2 |           1 |        2 |    110
12 |          2 |           1 |        3 |    120
13 |          2 |           2 |        1 |    130
14 |          2 |           2 |        2 |    140
15 |          2 |           2 |        3 |    150
16 |          2 |           3 |        1 |    160
17 |          2 |           3 |        3 |    170

注意:阵营 2 没有为事件 2 存入货币 3

我希望能够为每种货币获取每个派系的最后存入银行的总数(按日期计算)。 (即如果所有派系合并,每种货币目前总共存入多少)

所以,我需要一个看起来像这样的表格:

currency_id | total
          1 |   130  (eg 20 + 110)
          2 |   190  (eg 50 + 140)
          3 |   250  (eg 80 + 170) <- Uses Event 3 for Group 2 as Event 2 doesn't exist

我可以进行基本的连接等,但我很难过滤结果,以便获得每个派系 x 货币 x 事件的最新结果,然后我可以将它们加在一起以获得最终的总金额每种货币。

我尝试了 LEFT OUTER JOIN、GROUP BYss 和 HAVING COUNTs 的各种排列,并得到了一些有趣的(但不正确的结果)和各种不同的错误代码,但没有什么能满足我的需要。

谁能帮忙?

【问题讨论】:

    标签: mysql group-by sum sql-order-by


    【解决方案1】:

    我想你可以继续这样做:

    select eb.currency_id, sum(amount) as total 
    from events e 
    inner join (
       select faction_id, currency_id, max(date) as md
       from event_banking eb
       inner join events e
       on eb.event_id = e.id
       group by faction_id, currency_id
    ) a 
    on e.date = a.md
    inner join event_banking eb
    on e.id = eb.event_id
    and a.faction_id = eb.faction_id
    and a.currency_id = eb.currency_id
    group by currency_id;
    

    这里是SQL Fiddle

    【讨论】:

      猜你喜欢
      • 2020-01-08
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2019-07-22
      • 2018-05-31
      • 2021-10-09
      • 1970-01-01
      相关资源
      最近更新 更多