我有四个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&amp; amp;有COUNTs,并有一些有趣的(但不正确的结果),以及各种不同的错误代码,但没有任何远远接近我需要的。
有人可以帮忙吗?
答案 0 :(得分: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;