2016-09-13 126 views
0

我有2個表 第一個具有兌換率:選擇數據,其中日期爲max(日期)小於x

| date | ratio | currency | 
------------------------------ 
1| 9/09 | 1.0 | EUR  | 
2| 9/09 | 1.1 | USD  | -- no weekend 
3| 12/09 | 1.0 | EUR  | -- goes from 9 to 12 
4| 12/09 | 120.0 | JPY  | 

第二個具有交易

| date | amount | currency | 
------------------------------ 
1| 9/09 | 20.0 | EUR  | 
2| 9/09 | 101.0 | USD  | -- weekend 
3| 10/09 | 1.0 | USD  | -- has 10/09 which is a saturday 
4| 10/09 | 10.0 | USD  | 

兩者均包含的日期和貨幣。 現在我的匯率在週末沒有更新,而且不會改變。

我正在尋找一種高效的方式來選擇最後可用的數據放入exchange_rate表。換句話說,在失蹤日前的最後一天(例如10/09)

我正在使用交易表來獲取需要匯率信息的天數列表,以便我可以將其轉換一切都是歐元。

全部結果想應該是這樣的

| date | amount | currency | ratio | 
---------------------------------------- 
1| 9/09 | 20.0 | EUR  | 1.0 | 
2| 9/09 | 101.0 | USD  | 1.1 | -- already exists in exchange_rate 
3| 10/09 | 1.0 | USD  | 1.1 | -- selected because 9/09 is last available line 
4| 10/09 | 10.0 | USD  | 1.1 | 

或者我很好,更新與所需要的數據EXCHANGE_RATE表以及查詢,因爲最終的查詢是更清潔和更容易以後維護

select t.*, 
     (select er.ratio 
     from exchangerates er 
     where er.date <= e.date and er.currency = t.currency 
     order by er.date desc 
     limit 1 
     ) as ratio 
from transactions t; 

出於性能考慮,你想對指數:上

回答

1

您可以使用相關子查詢做到這一點。

我會從這開始,看看它是否符合您的需求。

+0

你在你的查詢中有ec.date,ec.currency和e.date,但從來沒有在你的查詢中。他們來自哪裏? – ShadowFlame

+0

我將e.date更改爲t.date,將ec.x更改爲er.x,並且這樣做。非常感謝:D – ShadowFlame

相關問題