all!我有以下问题:我有 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......
我想我可以单独获取每个货币代码的汇率,但我仍然希望我能够使用一个干净的查询。
假设最新汇率是您可以使用的最高 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;