• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

选择数据,其中日期为max(日期)小于x

mysql 来源:ShadowFlame 3次浏览

我有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; 

出于性能考虑,你想对指数:上

===========解决方案如下:

您可以使用相关子查询做到这一点。

我会从这开始,看看它是否符合您的需求。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)