0

4 つの 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 COUNT のさまざまな順列を試してみましたが、興味深い (ただし結果が正しくない) ものと、さまざまなエラー コードがありましたが、必要なものに近いものはありませんでした。

誰でも助けることができますか?

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 に答える