希望我的目标很明确:我有一个表格,其中存储“起始”货币、“到”货币、“买入”和“卖出”汇率,以及该汇率应适用的日期。
我想获取所有货币的最新汇率列表,直到给定的截止日期。
这意味着:
- 结果应包括“从”和“到”货币的每个组合*的一行,以及
- 如果表中有不止一行具有“从”和“到”货币的特定组合,则提取的行应该是最近日期的行。
我正在使用的查询不这样做。事实上,它目前似乎返回了一切。
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
*澄清一下:我将“从”和“到”货币计算为互斥的。如果数据库中有一行指定了从货币 ID 123 到货币 ID 321 的汇率,而另一行指定了从货币 ID 321 到货币 ID 123 的汇率,则应返回这两行。是的,从 123 到 321 的买入价在逻辑上等同于从 321 到 123 的卖出价,反之亦然。