1

全て!次の問題があります。単純なテーブルが 2 つあります。最初の「通貨」には、通貨に関する情報 (ISO 4217 コード (PK)、名前など) が格納されます。2 つ目の "rates" には、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 つのクリーンなクエリを使用できることを願っています。

4

1 に答える 1

2

Assuming that the latest exchange rate is the one with the highest id you can use:

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

But I strongly suggest another pattern I love. I explained it in another answer this morning:

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 に答える