Hallo Forum,
Ich habe heute wieder einmal eine Frage zu einem für mich etwas komplizierten SQL Statement. Ich möchte über eine Zeitreihe einen Trend berechnen.
Ich habe eine Tabelle wie folgt:
indikator | raumeinheit | jahr | wert
100 | 303 | 1980 | 2242
100 | 303 | 1981 | 2271
100 | 303 | 1982 | 2280
100 | 303 | 1983 | 2278
100 | 303 | 1984 | 2298
100 | 304 | 1980 | 1899
100 | 304 | 1981 | 1987
100 | 304 | 1982 | 1989
100 | 304 | 1983 | 1995
…
Ich möchte jetzt jeweils für jede Raumeinheit den Trend der Daten über alle Jahre pro Raumeinheit berechnen. Also als Ergebnis eine Tabelle mit dem jeweiligen Trendwert pro Raumeinheit.
Dabei sollen ausserdem die ersten Jahre mehr Gewicht bekommen als die älteren. Hierfür wird also jedes Jahr noch gewichtet. Das neueste jahr bekommt den Faktor 1, das nächste dem Faktor 0.5, das nächste den Faktor 0.25 (also immer die Hälfte vom vorigen).
Den Trend würde ich gern so berechnen:
(((100 / [wert+1]) * [wert]) -100) * faktor
für raumeinheit 303:
(((100 / 2271) * 2242) - 100) * 1
+
(((100 / 2280) * 2271) - 100) * 0.5
+
(((100 / 2278) * 2280) - 100) * 0.25
…
Ich habe jetzt etwas wie folgt versucht, aber ich bekomme das nicht richtig hin.
select raumeinheit,jahr,(((100/datenwert)*lag(datenwert) over(order by raumeinheit,jahr))-100) as steigung from ind10001 group by indikator,raumeinheit,jahr
Am liebsten wäre es mir wenn ich das in einer Funktion abfragen könnte. Irgendwas wie select trend(<>) from tabelle. Hat jemand einen Tipp wie ich die Abfrage über SQL hinbekommen kann, oder vielleicht noch besser wie eine Funktion aussehen könnte? Geht das überhaupt? Ich bin für jede Hilfe und jeden Tipp dankbar.
Vielen Dank schon einmal im Voraus.
Mit freundlichen Grüssen
Hanno