
Zitat von
Hanno
Hallo,
Ich habe einmal ein kleines problem und benötige etwas Hilfe. Ich würde gern ein Art Trend für DB Einträge ausgeben lassen. ich habe folgende Tabellenstruktur:
indikator|jahr|datenwert|raumeinheit
106|1991|8238|1201
106|1992|8215|1201
106|1993|8218|1201
106|1994|8330|1201
106|1995|8340|1201
106|1996|8123|1201
Der Trend soll sich jetzt folgendermassen berechnen:
Summe (Steigungen) / Summe Gewichtungen
-> Steigungen = (Datenwert im Jahr 1996 / Datenwert im Jahr 1995) * Gewichtung
Gewichtung soll beim 1. Wert 1 betragen. Bei den folgenden Intervallen wird die Gewichtung dann jeweils halbiert.
Formel: Trend = ((Wert1996/Wert1995)*1 + (Wert1995/Wert1994)*0.5 + (Wert1994/Wert1993)*0.25 +...) / Anzahl Intervalle
Trend = ((8123/8340)*1+(8340/8330)*0.5+(8330/8218)*0.25+...)/5
Als kleiner Ansatz vielleicht window-functions? Damit könntest Du den jeweiligen Vorgänger und den Multiplikationsfaktor berechnen (ich hab nur grad einen Knoten im Hirn, daher ist der Faktor nicht wirklich der, den Du willst, sondern 1/N)
Code:
test=*# select jahr, datenwert, lead(datenwert) over(order by jahr desc), (1::float / row_number() over(order by jahr desc))::numeric(4,3) as faktor from hanno order by jahr desc;
jahr | datenwert | lead | faktor
------+-----------+------+--------
1996 | 8123 | 8340 | 1.000
1995 | 8340 | 8338 | 0.500
1994 | 8338 | 8218 | 0.333
1993 | 8218 | 8215 | 0.250
1992 | 8215 | 8238 | 0.200
1991 | 8238 | | 0.167
(6 Zeilen)
In dieser Tabelle hast Du nun alle Werte und könntest daraus dann gemäß Deiner Formel das berechnen.
Hilft das etwas weiter?
Andreas
Lesezeichen