うまくいけば、私の目標は明確です。「開始」通貨、「終了」通貨、「購入」と「販売」の為替レート、およびレートが適用される日付を格納するテーブルがあります。
特定の締切日までのすべての通貨の最新の為替レートのリストを取得したいと思います。
つまり、次のことを意味します。
- 結果には、「from」と「to」の通貨の組み合わせ*ごとに1行が含まれている必要があります。
- テーブルに「開始」通貨と「終了」通貨の特定の組み合わせを持つ行が複数ある場合、フェッチされる行は最新の日付のものである必要があります。
私が使用しているクエリはそれを行いません。実際、それは現在すべてを返すようです。
SELECT ce.*
FROM currency_exchange ce
LEFT JOIN currency_exchange newer
ON (
newer.currency_from = ce.currency_from
AND newer.currency_to = ce.currency_to
AND newer.exchange_date > ce.exchange_date
AND newer.exchange_date <= '2012-03-27 00:00:00'
)
WHERE newer.id IS NULL
ORDER BY ce.currency_from, ce.currency_to, ce.exchange_date DESC
*明確にするために:私は「from」と「to」の通貨を相互に排他的なものとして数えています。データベースに通貨ID123から通貨ID321までのレートを指定する行があり、別の行が通貨ID 321から通貨ID123までのレートを指定する場合、これらの行の両方が返されます。はい、123から321までの購入率は、論理的には321から123までの販売率と同等であり、その逆も同様です。