2016-07-14 3 views
0

을 선택하십시오.SQL - 주어진 기간 동안의 평균 환율을 계산하고 여기에서 처음으로

나는 2 개의 테이블 1) 거래 (T1) 2) 환율 (T2)를 가지고 있습니다. T1은 일일 거래를 여러 통화로 보유하고 T2는 모든 통화의 일일 환율을 보유합니다.

첫째, 주어진 기간 동안 모든 통화의 평균 요율을 계산하고 싶습니다. (예 : 2016 년 1 월 1 일부터 2016 년 6 월 30 일 사이의 USD).

그러면 USD 트랜잭션이 계산 된 USD AV를 사용하도록 계산 된 평균 환율로 트랜잭션 및 변환 된 통화 금액을 가져 오려고합니다. 환율은 GBP av 금액을, EURO는 EUR 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 converted_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