特定の日付内でのみ有効な値を持つ為替レートのデータベースを使用しています。たとえば、USD を EURO に変換したい場合、特定の日付内に収まる特定の為替レートを使用する必要があります。為替レートは時間の経過とともに変化し、最終的にはより更新された別のレートに置き換えられます。これは私が持っている為替レート データベースのサンプルです。
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
上記の 2 つの取引では、2012 年 4 月 16 日と 17 日の 2 つの異なる日付があります。私は開始日しか持っていないので、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 テーブルの自己結合 (再帰的/自己参照関係) を実行して、2 つの Valid-From 列を隣り合わせに取得することを考えていました。最初の Valid-From は元のもので、2 番目は垂直方向にシフトされたものになります。結果のテーブルは次のようになります。
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
上記の SQL ステートメントを実行できるように、Valid-To フィールドであるかのように Valid-From-1 フィールドを使用したいと考えています。Valid-From フィールドの日付は 4 月 16 日で、Valid-To の日付は 4 月 18 日です。ただし、この段階では、レコードを垂直に「シフト」する再帰的な関係を行う方法がわかりません!
何か助けてください。これは簡単なことではありません!