SQL - рассчитать средний курс обмена за заданные периоды и использовать в выборке
Первый постер здесь.
У меня есть две таблицы 1) транзакции (T1) 2) обменные курсы (T2). T1 проводит ежедневные транзакции в нескольких валютах, T2 поддерживает ежедневные обменные курсы для всех валют.
Во-первых, я хочу рассчитать средний курс для каждой валюты за определенный период (скажем, для долларов США с 1 января 2016 года по 30 июня 2016 года).
Затем я хочу вывести транзакции и конвертированную сумму валюты по рассчитанному среднему курсу, чтобы транзакция в долларах США использовала рассчитанную USD AV. оценить и дает мне сумму австралийского доллара и евро использовать евро ав. скорость конвертации и так далее, для каждой отдельной строки.
SQL для получения средней скорости показан ниже;
select currency,avg(b.exch_rate) as avg_rate
from uviexchrates b
where date_from >'2015-01-01' and date_from < '2015-12-31'
and b.rates_to='gbp' and b.client like 'gc' group by b.currency
вышесказанное дает мне что-то вроде;
currency avg_rate
AUD 2.04
CAD 1.96
CHF 1.47
USD 1.41
мой запрос для таблицы транзакций;
select currency,cur_amount from agltransact
where period between '201600' and '201606'
результат, которого я добиваюсь;
cur_amount currency Av_rate converted_amount
-357000.00 EUR 1.12 -318153.46
6.55 EUR 1.12 5.84
6.55 EUR 1.12 5.84
27.77 USD 1.41 19.68
7.86 AUD 2.04 3.86
27.09 USD 1.41 19.20
54.98 CAD 1.96 28.11
2 крайних правых столбца вычисляются. Av_rate сверху 1-й запрос, а значение convert_amount является результатом cur_amount * av_rate.
Вопрос; как мне объединить 2 запроса, чтобы получить приведенный выше результат?
надеюсь, что это понятно.
большое спасибо
2 ответа
SELECT T1.cur_amount ,
T1.currency ,
T2.avg_rate ,
T1.cur_amount * T2.avg_rate AS converted_amount
FROM ( SELECT currency ,
cur_amount
FROM agltransact
WHERE period BETWEEN '201600' AND '201606'
) T1
LEFT OUTER JOIN ( SELECT currency ,
AVG(b.exch_rate) AS avg_rate
FROM uviexchrates b
WHERE date_from > '2015-01-01'
AND date_from < '2015-12-31'
AND b.rates_to = 'gbp'
AND b.client LIKE 'gc'
GROUP BY b.currency
) T2 ON T1.currency = T2.currency
Я хотел бы использовать left join
подключить вторую таблицу к первому запросу:
select t.currency, t.cur_amount, e.avg_rate, t_cur_amount / e.avg_rate
from agltransact t left join
(select e.currency, avg(b.exch_rate) as avg_rate
from uviexchrates e
where e.date_from >= '2016-01-01' and e.date_from <= '2016-06-30' and
e.rates_to = 'gbp' and
e.client like 'gc'
group by e.currency
) e
on t.currency = e.currency
where t.period between '201600' and '201606' ;
Примечание. Я изменил даты в первом запросе, чтобы они соответствовали описанию в тексте.