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' ;

Примечание. Я изменил даты в первом запросе, чтобы они соответствовали описанию в тексте.

Другие вопросы по тегам