Ich versuche, eine laufende Summe für wie viele von jedem Produkt in den letzten 30 Tagen verkauft wurden, zusätzlich zu, wie viele wurden jeden Tag verkauft. Ich habe versucht, dies mit einer Fensterfunktion zwischen der vorhergehenden und der aktuellen Reihe zu tun, aber das Problem ist, dass Produkte nicht immer einen Verkauf jeden Tag machen, so dass meine Fensterfunktion 30 Zeilen statt 30 Tage zurückblickt.Window-Funktion über 30 Tage, aber fehlende Zeilen
Beispieldaten wie folgt aussieht:
date | prod_id | sales | wrong_answer | correct_answer
2016-09-22 123 5 5 5
2016-09-24 123 2 7 7
2016-09-30 123 5 12 12
2016-10-01 123 4 16 16
2016-10-06 123 6 22 22
2016-10-18 123 4 26 26
2016-10-20 123 6 32 32
2016-11-04 123 14 46 30
2016-11-05 123 40 86 70
2016-11-25 123 30 116 94
2016-11-26 123 9 125 103
2016-12-10 123 12 137 115
2016-12-12 123 8 145 123
2016-12-16 123 4 149 127
2016-12-31 123 3 152 130
2017-01-09 123 4 156 134
2016-09-22 456 etc etc etc
Meine Frage ist:
SELECT
date,
prod_id,
sales,
SUM(sales) OVER (PARTITION BY prod_id OVER BY date ASC ROWS BETWEEN 30 PRECEDING AND CURRENT ROW) as wrong_answer
FROM prod_sales
Wie Sie sehen können, wenn das Datum trifft 2016.11.04 wrong_answer noch im Rückblick 30 Zeilen statt 30 Tage. Gibt es eine Möglichkeit, das zu erreichen, was ich versuche?
Dank
Vielleicht eine Unterabfrage verwenden? z.B. Geben Sie Ihrer Tabelle einen Alias (wie 'PS') und haben Sie' mycolumn = (wählen Sie Summe (Umsatz) von prod_sales wobei datediff (Tag, Datum, PS.date) zwischen 0 und 30) ' – ZLK
Dies wurde sehr ausführlich diskutiert dba.se: [Datumsbereich rollende Summe mit Fensterfunktionen] (http://dba.stackexchange.com/questions/114403/date-range-rolling-sum-using-window-functions) –