SQL - 计算给定期间的平均汇率并在select中使用

时间:2016-07-14 10:21:12

标签: mysql sql select average currency-exchange-rates

这里的第一次海报。

我有两张表1)交易( T1 )2)汇率( T2 )。 T1以多种货币持有每日交易,T2持有所有货币的每日汇率。

首先,我想计算一段时间内每种货币的平均汇率(比如2016年1月1日至2016年6月30日期间的美元)。

然后我想用计算的平均汇率来计算交易和转换的货币金额,以便美元交易使用计算的美元AV。率和给我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

我对Transaction表的查询是;

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来自第一个查询&amp; converted_amount是cur_amount * av_rate的结果。

问题; 如何组合2个查询以生成上述结果?

希望这很清楚。

非常感谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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' ;

注意:我更改了第一个查询中的日期以匹配文本中的描述。