这里的第一次海报。
我有两张表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个查询以生成上述结果?
希望这很清楚。 非常感谢答案 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' ;
注意:我更改了第一个查询中的日期以匹配文本中的描述。