0

我有四个 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

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

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

任何人都可以帮忙吗?

4

1 回答 1

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 小提琴

于 2013-10-16T07:59:03.803 回答