1

全部!我有以下问题:我有 2 个简单的表。第一个,比如“货币”,存储有关货币的信息(ISO 4217 代码 (PK)、名称等)。第二个,“rates”,有以下字段:id、currency_code(参考currency.code)、date_added(日期时间)、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...

我想我可以分别获得每种货币代码的汇率,但我仍然希望我能够使用一个干净的查询。

4

1 回答 1

2

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

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

但我强烈建议另一种我喜欢的模式。我今天早上在另一个答案中解释了它:

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;
于 2012-06-21T09:53:08.820 回答