选择日期最大(日期)小于x的数据

时间:2016-09-13 12:08:08

标签: mysql

我有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表以及所需的数据,因为最后的查询将更清晰,以后更容易维护

1 个答案:

答案 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)上的索引。

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