Saturday 18 November 2017

Calculate Moving Average Sql Server


Ich arbeite mit SQL Server 2008 R2 und versuche, einen gleitenden Durchschnitt zu berechnen. Für jeden Datensatz meiner Ansicht möchte ich die Werte der 250 vorherigen Datensätze sammeln und dann den Durchschnitt für diese Selektion berechnen. Meine Ansichtsspalten sind wie folgt: TransactionID ist eindeutig. Für jede TransactionID. Ich möchte den Durchschnitt für Spaltenwert über 250 Datensätze berechnen. So für die TransactionID 300, sammeln Sie alle Werte aus früheren 250 Zeilen (Ansicht wird absteigend nach TransactionID sortiert) und dann in Spalte MovAvg das Ergebnis des Mittelwerts dieser Werte schreiben. Ich bin auf der Suche, um Daten in einer Reihe von Datensätzen zu sammeln. Gefragt Oktober 28 14 um 20: 58Derzeit haben wir diskutiert, wie man rollende Durchschnitte in Postgres schreiben. Durch die populäre Nachfrage zeigten Ihnen, wie das gleiche in MySQL und SQL Server zu tun. Nun zu decken, wie kommentieren laute Charts wie folgt: Mit einem 7-Tage vorherigen durchschnittlichen Zeile wie folgt: Die große Idee Unsere erste Grafik oben ist ziemlich laut und schwer zu nützlichen Informationen zu bekommen. Wir können es glätten, indem wir einen 7-Tage-Durchschnitt auf die zugrundeliegenden Daten zeichnen. Dies kann durch Fensterfunktionen, Self-Joins oder korrelierte Unterabfragen erfolgen - decken die ersten beiden ab. Nun beginnen mit einem vorangegangenen Durchschnitt, was bedeutet, dass der durchschnittliche Punkt am 7. des Monats der Durchschnitt der ersten sieben Tage ist. Optisch verschiebt sich die Spitze im Graphen nach rechts, da eine große Spitze über die nächsten sieben Tage gemittelt wird. Erstens eine Zwischenzahltabelle erstellen Wir wollen einen Durchschnittswert über die gesamten Anmeldungen für jeden Tag berechnen. Angenommen, wir haben eine typische Benutzer-Tabelle mit einer Zeile pro neuen Benutzer und einem Zeitstempel erstellt, können wir unsere aggregate unsere Signups-Tabelle wie folgt erstellen: In Postgres und SQL Server können Sie diese als CTE verwenden. In MySQL können Sie sie als temporäre Tabelle speichern. Postgres Rolling Average Glücklicherweise hat Postgres Fenster-Funktionen, die der einfachste Weg, um einen laufenden Durchschnitt zu berechnen sind. Diese Abfrage setzt voraus, dass die Daten keine Lücken aufweisen. Die Abfrage ist Mittelung über die letzten sieben Zeilen, nicht die letzten sieben Termine. Wenn Ihre Daten Lücken aufweisen, füllen Sie sie mit generateseries oder Beitritt gegen eine Tabelle mit dichten Datumszeilen. MySQL Rolling Average MySQL fehlt Fenster-Funktionen, aber wir können eine ähnliche Berechnung mit Self-Joins zu tun. Für jede Zeile in unserem Zählungstabelle verbinden wir jede Zeile, die innerhalb der letzten sieben Tage war, und nehmen den Durchschnitt. Diese Abfrage behandelt automatisch Datumslücken, da wir Zeilen innerhalb eines Datumsbereichs anstelle der vorhergehenden N Zeilen betrachten. SQL Server Rolling Average SQL Server verfügt über Fensterfunktionen, so dass die Berechnung der rollenden Durchschnitt kann entweder in der Postgres-Stil oder MySQL-Stil erfolgen. Zur Vereinfachung wurden die MySQL-Version mit einem Self-Join. Dies ist konzeptionell das gleiche wie in MySQL. Die einzigen Übersetzungen sind die dateadd Funktion und explizit benannt Gruppe nach Spalten. Andere Mittelwerte Wir konzentrierten uns auf den 7-tägigen nachlaufenden Durchschnitt in diesem Beitrag. Wenn wir uns den 7-Tage-Leitdurchschnitt anschauen wollten, so einfach wie die Daten in die andere Richtung sortieren. Postgres: Zeilen zwischen 3 vorherigen und 3 folgenden MySql: zwischen signups. date - 3 und signups. date 3 in MySQL SQL Server: zwischen dateadd (Tag, -3, signups. SQL Server T-SQL-Code zur Berechnung eines Moving Average Von: Dallas Snider Lesen Sie Kommentare Verwandte Tipps: Mehr Funktionen - Benutzerdefinierte UDF Wie kann ich die Daten in einer Spalte mit einem Gleitenden Durchschnitt in T-SQL Können Sie bitte durch ein Beispiel in SQL Server mit T-SQL-Code gehen Wie können wir die Ergebnisse validieren Zeitreihen-Daten können von Natur aus verrauscht sein und ein guter Weg, um die Daten zu glätten ist ein gleitender Durchschnitt zu berechnen . Es gibt eine Reihe von Möglichkeiten, um einen gleitenden Durchschnitt in T-SQL zu berechnen, aber in diesem Tipp werden wir uns einen Weg ansehen, um einen gleitenden Durchschnitt zu berechnen, der das Mittelungsfenster x Anzahl der Zeilen hinter und x Zahl der Zeilen vor dem aktuellen Wert festlegt Datenzeile. Der Vorteil ist, dass es keine Verzögerung in den durchschnittlichen Wert zurückgegeben und der gleitende Mittelwert ist auf der gleichen Zeile mit seinem aktuellen Wert. Beginnen wir mit dem Erstellen einer Tabelle und dem Laden einiger Daten mit dem T-SQL unten. Wir haben 361 Datenpunkte, die eine verrauschte Sinuswelle erzeugen. Nach dem Laden der Daten führen wir den folgenden T-SQL-Code aus, um alle Spalten zusammen mit dem gleitenden Mittelwert auszuwählen. Im folgenden Code ist die gleitende durchschnittliche Fenstergröße 15 (7 Zeilen vor der aktuellen Zeile plus der aktuellen Zeile plus 7 Zeilen). Der gleitende Durchschnitt der Spalte DataValue wird als Spalte MovingAverageWindowSize15 zurückgegeben. Die ORDER BY-Klausel ist extrem wichtig, um die Daten in der richtigen Reihenfolge zu halten. Wir können die Ergebnisse kopieren und in Excel einfügen, um die Berechnung zu überprüfen. Im Bild unten beginnt das Fenster in Zelle C3 und endet bei C17. Der gleitende Durchschnitt, der von dem T-SQL in diesem Tipp berechnet wird, erscheint in Zelle D10. Der von Excel berechnete Durchschnitt ist am unteren Rand und er ist gleich dem Wert in D10. In der folgenden Abbildung sehen wir die ursprünglichen Datenwerte in blau mit dem gleitenden Durchschnitt in Rot aufgetragen. Nächste Schritte Passen Sie die Größe des gleitenden Durchschnittsfensters an, um zu sehen, wie sich das Diagramm ändert. Seien Sie auch sicher, diese anderen Spitzen auf T-SQL von mssqltips heraus zu überprüfen: Letztes Update: 3/8/2016

No comments:

Post a Comment