Hallo,
ich stehe gerade wieder mal vor einem Problem.
Wir wollen in unserer Applikation die Währungen wechseln können. Hierfür haben wir eine Tabelle mit den jeweiligen Wechselkursen (currency, date, rate).
Mein SQL ist ziemlich mies. Vielleicht kann mir jemand sagen, ob es so etwas wie Funktionen gibt, damit ich vllt so etwas schreiben kann:
Das Problem ist, dass ich gerade ziemlich viele Statements umschreiben muss, wo ich immer den Umweg über die Währungstabelle machen muss und mit meinen SQL Fähigkeiten ist das nicht gerade mit einer Zeile gemacht, sondern würde so aussehen (ungetestet):
Das Statement ist ziemlich unübersichtlich, und zusätzlich verliere ich glaube ich alle Zeilen, wo am gleichen Tag die gleiche Anzahl mehrfach verkauft wurde. Das MAX ist da drinnen, falls mal fälschlicherweise eine Zeile in der Währungstabelle doppelt existiert.
Kann mir vllt jemand sagen, wie man dieses Problem besser lösen könnte, als jetzt alle Statements so heftig umzuschreiben?
Gruß, Tommy
ich stehe gerade wieder mal vor einem Problem.
Wir wollen in unserer Applikation die Währungen wechseln können. Hierfür haben wir eine Tabelle mit den jeweiligen Wechselkursen (currency, date, rate).
Mein SQL ist ziemlich mies. Vielleicht kann mir jemand sagen, ob es so etwas wie Funktionen gibt, damit ich vllt so etwas schreiben kann:
Code:
SELECT
SUM (amount * price * getRate('$', date)) as totalprice
FROM
carsells
WHERE
id = 17
Das Problem ist, dass ich gerade ziemlich viele Statements umschreiben muss, wo ich immer den Umweg über die Währungstabelle machen muss und mit meinen SQL Fähigkeiten ist das nicht gerade mit einer Zeile gemacht, sondern würde so aussehen (ungetestet):
Code:
SELECT
SUM (b1.amount * b1.price * b1.rate) AS totalprice
FROM
(SELECT
a1.amount,
a1.price,
MAX(a2.rate) AS rate
FROM
(SELECT
sells.amount,
sells.price,
MAX(cur.date) AS curdate
FROM
(SELECT
amount,
price,
date
FROM
carsells
WHERE
id = 17) sells
INNER JOIN
currency cur
ON
cur.date <= sells.date
GROUP BY
sells.amount,
sells.price,
sells.date AS selldate) a1
INNER JOIN
currency cur a2
ON
a2.date = a1.curdate
GROUP BY
a1.amount,
a1.price) b1
Das Statement ist ziemlich unübersichtlich, und zusätzlich verliere ich glaube ich alle Zeilen, wo am gleichen Tag die gleiche Anzahl mehrfach verkauft wurde. Das MAX ist da drinnen, falls mal fälschlicherweise eine Zeile in der Währungstabelle doppelt existiert.
Kann mir vllt jemand sagen, wie man dieses Problem besser lösen könnte, als jetzt alle Statements so heftig umzuschreiben?
Gruß, Tommy