我有2张桌子 第一个是汇率:
| 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表以及所需的数据,因为最后的查询将更清晰,以后更容易维护
答案 0 :(得分:1)
您可以使用相关子查询执行此操作:
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;
为了提高性能,您需要exchangerates(currency, date, ratio)
上的索引。
我会从这开始,看看它是否符合您的需求。