Есть две таблицы:
PAYMENTS
— date
— currency
— amount
RATES
— date
— currency
— rate
Как построить запрос, выводящий список сумм платежей в базовой валюте по курсу на дату платежа?
У меня получается так:
SELECT amount *
(
SELECT rate FROM rates WHERE rates.currency=payments.currency AND rates.date=
(
SELECT MAX(date) FROM rates WHERE rates.currency=payments.currency AND rates.date<=payments.date
)
)
FROM payments
Получается два вложенных селекта, что (zope'ой чувствую) напряжет БД (как минимум FireBird) до изнеможения на большом наборе данных. Можно ли как-то решить этот вопрос проще?
При этом:
* Результат должен работать одновременно на SQLite и FireBird, поэтому желательно было бы получить ответ для SQL "вообще", а не для какого-то конкретного диалекта.
* По той же причине не хочется пользоваться хранимыми процеДурами.
* По условиям задачи решить ее надо именно на уровне SQL; как решать ее на уровне клиента, я понимаю
* Вопросы NULL'ов, неправильных наименований полей (название поля "date" может оказаться ключевым словом в каком-нибудь диалекте SQL) и т.п. мы опускаем для упрощения.