Durchschnitt zwischen zwei Zeilen berechnen

LuiMe

Neuer Benutzer
Beiträge
1
Hallo,

ich habe aktuell das Problem, dass ich nicht genau weiß, wie ich den Durchschnitt zwischen zwei Werten berechnen kann.

Beispielsweise habe ich folgende Tabelle: https://i.imgur.com/CZLFSii.png

Hier wollte ich gerne den 20 Tages Durchschnitt von Stand ausrechnen zwischen. In Datum steht mittlerweile immer ein anderer Tag. Der 20 Tages Durchschnitt soll von ID 23 bis ID 3 berechnet werden.

Viele Grüße
 
Werbung:
Dein externes Bild kann ich nicht sehen, poste bitte einfach eine Tabellendefinition mit Beispieldaten in Textform.
Den Durchschnitt berechnet man mit der Funktion AVG().

Wenn Deine Zeilen dafür ein gemeinsames Merkmal haben, ganz einfach.
Der Durchschnitt zwischen 2 Werten ist (Wert1 + Wert2 ) / 2

Von ID 23 bis ID 3 ist allerdings schwierig. Sind das 2 Zeilen, 2 Werte? 20 Tages Durchschnitt klingt nicht nach 2 Werten und auch nicht unbedingt nach 2 Zeilen.
 
mal ein Beispiel:

Code:
edb=# create table luime(datum date, value int);
CREATE TABLE
edb=*# insert into luime select '2020-01-01'::date + s * '1day'::interval, random()*100 + s * 100 from generate_series(1,40) s;
INSERT 0 40
edb=*# select * from luime ;
       datum        | value
--------------------+-------
 02-JAN-20 00:00:00 |   147
 03-JAN-20 00:00:00 |   257
 04-JAN-20 00:00:00 |   394
 05-JAN-20 00:00:00 |   464
 06-JAN-20 00:00:00 |   585
 07-JAN-20 00:00:00 |   663
 08-JAN-20 00:00:00 |   787
 09-JAN-20 00:00:00 |   828
 10-JAN-20 00:00:00 |   968
 11-JAN-20 00:00:00 |  1046
 12-JAN-20 00:00:00 |  1171
 13-JAN-20 00:00:00 |  1215
 14-JAN-20 00:00:00 |  1392
 15-JAN-20 00:00:00 |  1463
 16-JAN-20 00:00:00 |  1543
 17-JAN-20 00:00:00 |  1670
 18-JAN-20 00:00:00 |  1756
 19-JAN-20 00:00:00 |  1856
 20-JAN-20 00:00:00 |  1956
 21-JAN-20 00:00:00 |  2001
 22-JAN-20 00:00:00 |  2130
 23-JAN-20 00:00:00 |  2278
 24-JAN-20 00:00:00 |  2369
 25-JAN-20 00:00:00 |  2443
 26-JAN-20 00:00:00 |  2588
 27-JAN-20 00:00:00 |  2612
 28-JAN-20 00:00:00 |  2738
 29-JAN-20 00:00:00 |  2858
 30-JAN-20 00:00:00 |  2967
 31-JAN-20 00:00:00 |  3063
 01-FEB-20 00:00:00 |  3174
 02-FEB-20 00:00:00 |  3266
 03-FEB-20 00:00:00 |  3341
 04-FEB-20 00:00:00 |  3405
 05-FEB-20 00:00:00 |  3520
 06-FEB-20 00:00:00 |  3606
 07-FEB-20 00:00:00 |  3797
 08-FEB-20 00:00:00 |  3825
 09-FEB-20 00:00:00 |  3931
 10-FEB-20 00:00:00 |  4063
(40 rows)

So, für jeden Tag und nur für den Tag der Durchschnitt:

Code:
edb=*# select *, avg(value) over (rows between 0 preceding and 0 following) from luime ;
       datum        | value |          avg         
--------------------+-------+-----------------------
 02-JAN-20 00:00:00 |   147 |  147.0000000000000000
 03-JAN-20 00:00:00 |   257 |  257.0000000000000000
 04-JAN-20 00:00:00 |   394 |  394.0000000000000000
 05-JAN-20 00:00:00 |   464 |  464.0000000000000000
 06-JAN-20 00:00:00 |   585 |  585.0000000000000000
 07-JAN-20 00:00:00 |   663 |  663.0000000000000000
 08-JAN-20 00:00:00 |   787 |  787.0000000000000000
 09-JAN-20 00:00:00 |   828 |  828.0000000000000000
 10-JAN-20 00:00:00 |   968 |  968.0000000000000000
 11-JAN-20 00:00:00 |  1046 | 1046.0000000000000000
 12-JAN-20 00:00:00 |  1171 | 1171.0000000000000000
 13-JAN-20 00:00:00 |  1215 | 1215.0000000000000000
 14-JAN-20 00:00:00 |  1392 | 1392.0000000000000000
 15-JAN-20 00:00:00 |  1463 | 1463.0000000000000000
 16-JAN-20 00:00:00 |  1543 | 1543.0000000000000000
 17-JAN-20 00:00:00 |  1670 | 1670.0000000000000000
 18-JAN-20 00:00:00 |  1756 | 1756.0000000000000000
 19-JAN-20 00:00:00 |  1856 | 1856.0000000000000000
 20-JAN-20 00:00:00 |  1956 | 1956.0000000000000000
 21-JAN-20 00:00:00 |  2001 | 2001.0000000000000000
 22-JAN-20 00:00:00 |  2130 | 2130.0000000000000000
 23-JAN-20 00:00:00 |  2278 | 2278.0000000000000000
 24-JAN-20 00:00:00 |  2369 | 2369.0000000000000000
 25-JAN-20 00:00:00 |  2443 | 2443.0000000000000000
 26-JAN-20 00:00:00 |  2588 | 2588.0000000000000000
 27-JAN-20 00:00:00 |  2612 | 2612.0000000000000000
 28-JAN-20 00:00:00 |  2738 | 2738.0000000000000000
 29-JAN-20 00:00:00 |  2858 | 2858.0000000000000000
 30-JAN-20 00:00:00 |  2967 | 2967.0000000000000000
 31-JAN-20 00:00:00 |  3063 | 3063.0000000000000000
 01-FEB-20 00:00:00 |  3174 | 3174.0000000000000000
 02-FEB-20 00:00:00 |  3266 | 3266.0000000000000000
 03-FEB-20 00:00:00 |  3341 | 3341.0000000000000000
 04-FEB-20 00:00:00 |  3405 | 3405.0000000000000000
 05-FEB-20 00:00:00 |  3520 | 3520.0000000000000000
 06-FEB-20 00:00:00 |  3606 | 3606.0000000000000000
 07-FEB-20 00:00:00 |  3797 | 3797.0000000000000000
 08-FEB-20 00:00:00 |  3825 | 3825.0000000000000000
 09-FEB-20 00:00:00 |  3931 | 3931.0000000000000000
 10-FEB-20 00:00:00 |  4063 | 4063.0000000000000000
(40 rows)

und nun ab 5 Tage vorher bis 5 Tage danach:

Code:
edb=*# select *, avg(value) over (rows between 5 preceding and 5 following) from luime ;
       datum        | value |          avg         
--------------------+-------+-----------------------
 02-JAN-20 00:00:00 |   147 |  418.3333333333333333
 03-JAN-20 00:00:00 |   257 |  471.0000000000000000
 04-JAN-20 00:00:00 |   394 |  515.6250000000000000
 05-JAN-20 00:00:00 |   464 |  565.8888888888888889
 06-JAN-20 00:00:00 |   585 |  613.9000000000000000
 07-JAN-20 00:00:00 |   663 |  664.5454545454545455
 08-JAN-20 00:00:00 |   787 |  761.6363636363636364
 09-JAN-20 00:00:00 |   828 |  864.8181818181818182
 10-JAN-20 00:00:00 |   968 |  962.0000000000000000
 11-JAN-20 00:00:00 |  1046 | 1060.0909090909090909
 12-JAN-20 00:00:00 |  1171 | 1158.7272727272727273
 13-JAN-20 00:00:00 |  1215 | 1258.0909090909090909
 14-JAN-20 00:00:00 |  1392 | 1355.2727272727272727
 15-JAN-20 00:00:00 |  1463 | 1457.8181818181818182
 16-JAN-20 00:00:00 |  1543 | 1551.7272727272727273
 17-JAN-20 00:00:00 |  1670 | 1650.2727272727272727
 18-JAN-20 00:00:00 |  1756 | 1750.9090909090909091
 19-JAN-20 00:00:00 |  1856 | 1855.8181818181818182
 20-JAN-20 00:00:00 |  1956 | 1951.3636363636363636
 21-JAN-20 00:00:00 |  2001 | 2053.6363636363636364
 22-JAN-20 00:00:00 |  2130 | 2150.8181818181818182
 23-JAN-20 00:00:00 |  2278 | 2247.9090909090909091
 24-JAN-20 00:00:00 |  2369 | 2348.0909090909090909
 25-JAN-20 00:00:00 |  2443 | 2449.0909090909090909
 26-JAN-20 00:00:00 |  2588 | 2549.7272727272727273
 27-JAN-20 00:00:00 |  2612 | 2656.3636363636363636
 28-JAN-20 00:00:00 |  2738 | 2759.6363636363636364
 29-JAN-20 00:00:00 |  2858 | 2856.2727272727272727
 30-JAN-20 00:00:00 |  2967 | 2950.4545454545454545
 31-JAN-20 00:00:00 |  3063 | 3048.3636363636363636
 01-FEB-20 00:00:00 |  3174 | 3140.9090909090909091
 02-FEB-20 00:00:00 |  3266 | 3248.6363636363636364
 03-FEB-20 00:00:00 |  3341 | 3347.4545454545454545
 04-FEB-20 00:00:00 |  3405 | 3445.0000000000000000
 05-FEB-20 00:00:00 |  3520 | 3544.6363636363636364
 06-FEB-20 00:00:00 |  3606 | 3592.8000000000000000
 07-FEB-20 00:00:00 |  3797 | 3639.3333333333333333
 08-FEB-20 00:00:00 |  3825 | 3686.0000000000000000
 09-FEB-20 00:00:00 |  3931 | 3735.2857142857142857
 10-FEB-20 00:00:00 |  4063 | 3790.3333333333333333
(40 rows)

edb=*#
 
Werbung:
Hab mir jetzt mal das Bild angeschaut. Für mich passt da nichts zusammen. Es ist immer der gleiche Tag, auf allen Datensätzen im Bild. Die Aktienkurse, die vermutlich den Durchschnittswert kategorisieren, haben erstaunliche Schwankungen. 2 Zeilen finde ich nirgends als Bezug. Von 20 Tagen keine Spur. ID 23-3 ergibt gemäß Bild, wo ein anderer Datensatz markiert ist, auch keinen Sinn.
 
Zurück
Oben