2016-07-14 2 views
0

первый раз постер здесь.SQL - рассчитать средний обменный курс для данных периодов и использовать в выборе

У меня есть две таблицы 1) сделок (T1) 2) обменные курсы (Т2). T1 проводит ежедневную транзакцию в нескольких валютах, T2 ежедневно использует обменные курсы для всех валют.

Во-первых, я хочу рассчитать среднюю ставку за каждую валюту за данный период (например, за доллар США с 1 января 2016 года по 30 июня 2016 года).

Затем я хочу выявить транзакции и конвертировать валютную сумму на рассчитанную среднюю ставку, чтобы в транзакции USD использовался расчетный доллар США. и дает мне сумму GBP av, а EURO - EURO 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 

расчеты двух дальних правых столбцов. Av_rate сверху 1-го запроса & convert_amount является результатом cur_amount * av_rate.

Вопрос; Как я объединил 2 запроса, чтобы получить результат?

желающий это ясно.

большое спасибо

+0

думаю простой присоединение сделаю ... – Avi

ответ

0
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 
+0

это большое спасибо !! – Asad

+0

, если это решение сработало для вас. Не стесняйтесь ответить – Avi

0

Я хотел бы использовать 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' ; 

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

+0

отлично, спасибо !!! – Asad

Смежные вопросы