2016-07-14 8 views
0

erstmals Poster hier.SQL - berechnen durchschnittlichen Wechselkurs für bestimmte Zeiträume und verwenden Sie in ausgewählten

Ich habe zwei Tabellen 1) Transaktionen (T1 ) 2) Wechselkurse (T2). T1 hält tägliche Transaktion in mehreren Währungen, T2 hält tägliche Wechselkurse für alle Währungen.

erstens, ich möchte die durchschnittliche Rate für jede Währung für einen bestimmten Zeitraum berechnen (sagen wir für USD zwischen 1. Januar 2016 bis 30. Juni 2016).

Ich möchte dann die Transaktionen und konvertierten Währungsbetrag um den berechneten Durchschnittskurs, so dass die USD-Transaktion die berechnete USD AV verwendet. Rate und gibt mir GBP av Betrag und der EURO verwenden die EURO av. zu konvertierende Rate usw. für jede einzelne Zeile.

die SQL, um die durchschnittliche Rate aus wie folgt zu erhalten;

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 

das oben genannte gibt mir etwas wie;

currency avg_rate 
AUD   2.04 
CAD   1.96 
CHF   1.47 
USD   1.41 

meine Abfrage für die Transaktionstabelle ist;

select currency,cur_amount from agltransact 
where period between '201600' and '201606' 

das Ergebnis bin ich nach ist;

 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 

Die 2 rechten Spalten werden berechnet. Av_rate von oben 1. Query & der Wert converted_amount ist das Ergebnis von cur_amount * av_rate.

Frage; Wie kombiniere ich die 2 Abfragen, so dass das obige Ergebnis erzeugt wird?

hoffe, das ist klar.

vielen Dank

+0

Ich denke, einfache Join wird tun ... – Avi

Antwort

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

das ist super danke !! – Asad

+0

Wenn diese Lösung für Sie funktioniert. Bitte akzeptieren Sie die Antwort – Avi

0

würde ich left join verwenden, um die zweite Tabelle auf die erste Abfrage zu verbinden:

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

Hinweis: ich die Daten in der ersten Abfrage geändert, die Beschreibung paßt in der Text.

+0

groß, danke !!! – Asad