Attribute datensatzweise mit SELECT aggregieren

tiger1

Grünschnabel
Hallo,

ich würde gerne datensatzweise Summe und Durchschnitte neu berechnen lassen, so dass jeweils bezug auf die vergangenen Stunden genommen wird, aber nicht auf alle Stunden:

Code:
Stunde |  Besucher | Anzahl Besucher bis Dato | Besucher/pro Stunde bis Dato
----------------------------------------------------------------------------------------------------
10:00   |  2              |    2                                    |   2      
11:00   |  4              |    6                                    |   4    
12:00   |  2              |    8                                    |   8/3 = 2,6667
usw.
----------------------------------------------------------------------------------------------------



SELECT
Stunde,
Besucher,
SUM(Besucher) AS "Anzahl Besucher bis Dato",
AVG(Besucher) AS " Besucher/pro Stunde bis Dato"
FROM tblBesucher

würde ja über alle Stunden aggregieren. Hat jemand eine Idee wie man das nur für jeweils vergangen Stunden (inklusive der Stunde die zum Datensatz gehört) bewerkstelligen könnte ?
 
Zuletzt bearbeitet:
Ja, mit Windowing Functions. Und zwar so (Oracle):
SQL:
SELECT
Stunde,
Besucher,
SUM(Besucher) OVER (ORDER BY Stunde RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS "Anzahl Besucher bis Dato",
AVG(Besucher) OVER (ORDER BY Stunde RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS " Besucher/pro Stunde bis Dato"
FROM tblBesucher;

Welches DBMS? MySQL kennt keine Windowing Functions. Workaround:
http://stackoverflow.com/questions/664700/calculate-a-running-total-in-mysql
 
Zuletzt bearbeitet von einem Moderator:
Das ist ja eine coole Funktion, leider hab ich kein Oracle sondern tatsächlich MySql.
Super Hilfe, danke schön.
 
Zurück