Tuesday 8 August 2017

Moving Average Sql Server 2012


Ich versuche, einen 3-Monats-Rolling-Durchschnitt zu berechnen, der nach Region und Monat gruppiert ist, wie in. Hinweis in diesem Monat wird zu illustrativen Zwecken erweitert, ich habe wirklich erwartet, dass die Ausgabe nur einen einzigen Monat sagt. Jetzt kann ich dies tun, indem ich einen CTE schaffe Gruppierung nach Region und Monat, dann Beitritt zu ihm ein paar Mal wie. But, dass s hässlich, stellen Sie sich vor, wenn Sie eine 6 Monate rollende durchschnittliche oder 12 Monate rollen durchschnittlich Ich versuche, die t-sql 2012 analytische Funktionen zu verwenden, zu tun Die RANGE Option Ich habe ROWS vorher vor, aber nie range. What ich versucht war. But bekomme ich einen Syntaxfehler. Msg 8120, Stufe 16, Status 1, Zeile 2 Die Spalte ist in der Auswahlliste ungültig, weil sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist. Gerade ich mache etwas Dummes, aber ich bin mir nicht sicher, was 23 13 at 7 54.marcs 476k 101 920 1089.Sie müssen diese Gruppe in die Fensterfunktion avg var über Partition nach Region oder durch ahorsewithnoname Mar 23 13 um 8 41. Zuerst RANGE wird nur mit UNBOUNDED und CURRENT unterstützt ROW Rahmen Begrenzer, kann es nicht mit N PRECEDING oder N FOLGEN verwendet werden Von Ihrem Titel, sieht aus wie Sie wollen, um 3 Monate rollen avg Schieben avg, dann sind Sie besser zu verwenden ROWS mit ROWS Dies ist eher, was Sie brauchen SQl Fiddle Demo. Note Verwenden von RANGE Hinweis Mit RANGE müssen Sie die Partitionsbreite steuern, da Sie um 3 Monate aggieren möchten und der Bereich nicht unterstützt N PRECEDING und N FOLLOWING es nur unterstützt folgend. Siehe Mar 23 13 bei 9 39.Ich habe gelesen Die Diskussion, die Sie erwähnt haben Es ist anwendbar auf PostgreSQL, da es erlaubt ist, benutzerdefinierte Aggregat-Funktion mit SQL in PostgreSQL zu erstellen, aber nicht erlaubt in SQL Server Mit rekursiven CTE ist eine machbare Möglichkeit in SQL Server, aber ich merke, dass CTE-Weg entstehen kann Mehr Tabellen-Scan als Fenster-Funktionen Also mache ich diesen Beitrag zu fragen, ob es möglich ist, zu berechnen exponentiellen gleitenden Durchschnitt mit SQL Server 2012 Fenster-Funktion genau wie die Berechnung einfacher gleitender Durchschnitt xiagao1982 Apr 14 13 bei 2 53.First, berechnen Sie die EMA SMA x Statt der EMA x Zweitens ist deine Glättungskonstante eigentlich der Beta-Wert in meiner Formel, nicht das Alpha Mit diesen beiden Änderungen sieht das SQLFiddle so aus. Allerdings gibt es noch einen kleinen Unterschied zwischen dem tatsächlichen Ergebnis und dem erwarteten Ergebnis, das ich gehen würde Zurück und sehen, ob ihre EMA-Definition mit dem übereinstimmt, den ich sebastian Meine 7. Mai 13 um 13 46. Ich habe gerade das Formular in der Kalkulationstafel angeschaut und es ist weg von der Standard-EMA-Definition Meine Formel berechnet den exponentiellen gleitenden Durchschnitt der Die letzten zehn Zeilen Die Kalkulationstabelle berechnet zuerst den Standard-Durchschnitt über die letzten zehn Zeilen und dann den uneingeschränkten exponentiell gewichteten gleitenden Durchschnitt über alle Mittelwerte Dies folgt dem Formular hier Sebastian Meine Mai 7 13 bei 13 52.Um einen einfachen gleitenden Durchschnitt zu glätten Daten ist Eine ziemlich populäre Technik es ist zu schlecht das primäre Beispiel in der SQL Anywhere Hilfe ist weit von einfach Was macht dieses Beispiel so komplex Neben der Problem-Anweisung, das ist berechnen den gleitenden Durchschnitt aller Produktverkäufe, im Monat, im Jahr 2000. Hier s, was macht es kompliziert. Zwei Verweise auf die AVG-Funktion. a GROUP BY, die alle von sich aus macht fast jeder SELECT ein Kopf-Scratcher. Eine Stealth-WINDOW-Klausel. ein WINDOW-Klausel, die nicht einmal das WINDOW-Keyword verwendet, so dass die Uneingeweihten die Leute, die Beispiele mehr als alle anderen brauchen, ist es nicht offensichtlich, dass ein FENSTER überhaupt beteiligt ist. Nicht nur eine WINDOW-Klausel, Aber eine, die jede einzelne Komponente, die Sie in einer WINDOW. a PARTITION BY. a RANGE Klausel nicht eine einfache ROWS-Klausel, aber voll-geblasen RANGE-Klausel, eine, die eine intime Beziehung mit der ORDER BY Ich weiß, was eine Zeile ist, Aber was das Redakteur ist ein RANGE. But warten, da s mehr Die Wahl von RANGE über ROWS in diesem Beispiel ist entscheidend für den korrekten Betrieb der Abfrage für eine ausführlichere Diskussion dieses Beispiels, siehe Beispiel 23 - Berechnen eines Moving Average In Glenn Paulley s ausgezeichnetes OLAP weißes Papier Jetzt, lassen Sie s wieder auf track. A Wirklich wirklich einfach Moving Average. Das folgende Beispiel zeigt 10 Tage im Wert von Daten zusammen mit dem gleitenden Durchschnitt der heutigen Wert und gestern s Die WINDOW-Klausel auf Linien 21 bis 23 definiert ein bewegendes Fenster, das zwei Zeilen enthält, die heute die Zeile CURRENT ROW und gestern s Zeile 1 PRECEDING. die FENSTER ORDER BY-Klausel bestimmt, was PRECEDING die vorhergehende Zeile durch und. die ROWS-Klausel bestimmt die Größe des Fensters immer zwei Zeilen. Der Ausdruck AVG OVER twodays auf Zeile 19 bezieht sich auf die WINDOW-Klausel nach Namen, und es sagt SQL Anywhere, um den Durchschnitt der beiden Werte zu berechnen, die im 2-reihigen Schiebefenster vorhanden sind, für jede Zeile im Ergebnis set. So , Für 2012-02-02 der Durchschnitt von 10 und 20 ist 15 000000.for 2012-02-03 der Durchschnitt von 20 und 10 ist 15 000000.for 2012-02-04 der Durchschnitt von 10 und 30 ist 20 000000.for 2012-02-10 der Durchschnitt von 10 und 60 ist 35 000000.Oops, was über die erste row. The 2012-02-01 Zeile doesn t haben eine PRECEDING Zeile, also was ist der Durchschnitt über das bewegte Fenster. Nach Glenn Paulley s Whitepaper im Falle eines bewegten Fensters, wird davon ausgegangen, dass Zeilen, die Nullwerte enthalten, vor der ersten Zeile und nach der letzten Zeile in der Eingabe vorhanden sind. Das bedeutet, wenn das bewegte Fenster 2012-02-01 als das hat CURRENT ROW, die 1 PRECEDING-Zeile enthält NULL-Werte und wenn SQL Anywhere ein AVG berechnet, das einen NULL-Wert enthält, zählt es nicht das NULL überhaupt nicht im Zähler oder im Nenner bei der Berechnung des durchschnittlichen Hier s-Beweis Das ist der Grund, warum twodayaverage 10 000000 für die erste Reihe 2012-02-01.Posted von Breck Carter um 3 47 PM.

No comments:

Post a Comment