从数据库中选择多个货币代码的最新费率的最佳方法

时间:2012-06-21 09:44:01

标签: mysql database

一切!我有以下问题:我有2个简单的表。第一个,例如“货币”,存储有关货币的信息(ISO 4217代码(PK),名称等)。第二个,“费率”,有以下字段:id,currency_code(引用currency.code),date_added(datetime),rate。

我想要的是选择几种货币代码的最新汇率。首先,我想这样做:

SELECT r.rate
FROM rates r
WHERE r.id IN (SELECT id
               FROM rates r1
               WHERE r1.currency_code IN('USD', 'EUR')
               GROUP BY r1.currency_code
               ORDER BY r1.date_added DESC)
ORDER BY r.currency_code ASC

但我很快就记得在对结果进行分组后会考虑ORDER子句。在我的情况下,子查询最终返回最早费率的ID ...

我想我可以单独获得每种货币代码的费率,但我仍然希望我能够使用一个简单的查询。

1 个答案:

答案 0 :(得分:2)

假设最新的汇率是您可以使用的最高汇率:

SELECT *
FROM rates r
WHERE r.id IN (
    SELECT MAX(r1.id)
    FROM rates r1
    GROUP BY r1.currency_code
) T;

但我强烈建议我喜欢另一种模式。我今天早上在another answer解释了它:

SELECT
  c.*,
  r1.*
FROM currency c
INNER JOIN rates r1 ON c.code = r1.currency_code
LEFT JOIN rates r2 ON r1.currency_code = r2.currency_code AND r2.id > r1.id
WHERE r2.id IS NULL;