我正在使用一个汇率数据库,该数据库的值仅在特定日期内有效。例如,如果我想将美元兑换成欧元,我必须使用特定日期内的特定汇率。汇率会随着时间而变化,最终会被另一种更新的汇率所取代。这是我拥有的汇率数据库的示例:
Exchange_Rate_History
Valid-From Exchange-rate From-Currency To-Currency
2012-04-16 0.8 USD EUR
2012-04-18 0.82 USD EUR
2012-04-20 0.81 USD EUR
现在,如果您注意到,我只有一个“有效期至”日期,但我没有“有效期至”日期。
现在我有另一个表需要加入 Exchange_Rate_History 表。此表包含购物交易
Purchases
Transaction-ID Transaction-Date Amount-In-USD
1 2012-04-16 100
2 2012-04-17 100
对于上述两个交易,我们有两个不同的日期,即 2012 年 4 月 16 日和 17 日。但是对于这两个日期,我们需要使用标记为 Valid-From 2012-04-16 的汇率。因为我只有一个起始日期,所以我不能使用 BETWEEN..AND 来执行连接。因此,以下联接是不可能的
SELECT
*
FROM
Exchange_Rate_History
INNER JOIN Purchases ON (Purchases.Transaction-Date BETWEEN Exchange_Rate_History.Valid-From AND Exchange_Rate_History.???)
我正在考虑对 Exchange_Rate_History 表进行自联接(递归/自引用关系),以便获得两个相邻的 Valid-From 列。第一个 Valid-From 将是原始的,而第二个将是垂直移动的。结果表如下所示:
Exchange_Rate_History
Valid-From Exchange-rate From-Currency To-Currency Valid-From-1 (aliased to Valid-To)
2012-04-16 0.8 USD EUR 2012-04-18
2012-04-18 0.82 USD EUR 2012-04-20
2012-04-20 0.81 USD EUR
我想使用 Valid-From-1 字段,就好像它是 Valid-To 字段一样,以便我可以执行上面的 SQL 语句。现在请注意,Valid-From 字段的日期为 4 月 16 日,而 Valid-To 的日期为 4 月 18 日。但是在这个阶段我不知道如何做垂直“移动”记录的递归关系!
请问有什么帮助吗?这不是一件容易的事!