Saturday, February 25, 2017

Berechnen Moving Average In 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 Oct 28 14 um 20: 58Geschätzt gleitenden Durchschnitt in T-SQL In einem früheren Beitrag habe ich die Berechnung der gleitenden Durchschnitte in T-SQL. Allerdings gibt es einen großen Nachteil mit einfachen gleitenden Durchschnitten. Preisänderungen am Anfang der Periode haben die gleiche Bedeutung wie die jüngsten Preisänderungen. Irgendwie haben Sie gerne die verschiedenen Gewichte zu den Preisänderungen zuweisen, so dass die jüngsten Änderungen das meiste Gewicht bekommen. Dazu kann ein Weighted Moving Average (WMA) berechnet werden. In diesem Blog-Beitrag werde ich zeigen zwei verschiedene Methoden, um WMA zu berechnen, eine, die auf SQL Server 2005 und höher verwendet werden kann, und die andere Version ist für SQL Server-Versionen früher als 2005. Um das relative Gewicht jeder Preisänderung zu berechnen, Müssen die Position jeder Preisänderung relativ zum berechneten Tag kennen. Daher kann eine Fensterfunktion nicht verwendet werden. Es ist nicht möglich, Informationen aus den einzelnen Zeilen im Fenster zu erhalten. Im folgenden Beispiel wird der gewichtete gleitende Durchschnitt für 9 Tage (WMA9) berechnet. Das Beispiel verwendet das TAdb. Ein Skript zur Erstellung von TAdb finden Sie hier. Unabhängig von der SQL Server-Version, für jede Zeile müssen wir auf die 8 vorherigen Zeilen, 9 mit der aktuellen Zeile enthalten. Diese 9 Zeilen sind das Fenster, das unsere Preisänderungen enthält. Jeder Zeile in diesem Fenster wird ein lineares Gewicht zugewiesen, das mit dem gleichen Betrag für jede Zeile bis zur aktuellen Zeile zunimmt. Das Gewicht für jede Zeile wird berechnet, indem die Fensterreihenposition relativ zur aktuellen Zeile verwendet wird. Let8217s sagen, dass wir WMA für die 9-te Zeile berechnen wollen (Zitate von TAdb StockId 1): 1 30,02 30,02 2 30,33 60,66 3 30,33 90,99 4 30,44 121,76 5 30,24 151,20 6 30,27 181,62 7 29,87 209,09 8 30,00 240,00 9 30,02 270,18 Die Summe der obigen ist 1355,52. Dies wird dann durch die Summe der Gewichte dividiert, das heißt 123456789 45. Das WMA9 für Zeile 9 ist 1355,52 45 30,12. Wenn Sie WMA ausser für 9 Tage berechnen möchten, verwenden Sie die folgende T-SQL (erhalten Sie hier die GetNums2-Funktion), um den Divisor für die Periodenlänge (zB 45 für 9 Tage WMA) zu erhalten: Gewichtete Moving Average (WMA) Divisoren Gewichteter gleitender Durchschnitt SQL Server 2005 und höher Diese Version verwendet einen CTE, um die WMA zu berechnen: Ergebnis für 9 Tage Gewichteter gleitender Durchschnitt (WMA9) In den obigen Ergebnissen können Sie sehen, dass das WMA9 für Zeile 9 30,12 ist, wie zuvor berechnet. Weighted Moving Average vor SQL Server 2005 Der einzige Unterschied zwischen der SQL Server 2005-Version und dieser ist die Verwendung eines gemeinsamen Tabellenausdrucks. Die Vor 2005-Version verwendet tatsächliche Tabellen anstelle von CTE8217s: Leistung Wenn Sie einen einfachen gleitenden Durchschnitt berechnen und SQL Server 2012 oder höher verwenden, kann eine riesige Verbesserung in der Leistung gesehen werden, wenn Fensterfunktionen im Vergleich zu den alternativen Metohods verwendet werden, die in älteren Versionen von SQL Server verwendet werden . Berechnungen von gewichteten gleitenden Durchschnitten können jedoch Fensterfunktionen auf dieselbe Weise verwenden. Ein Vergleich zwischen der SQL Server 2005-Version von WMA zeigt eine kleine Verbesserung gegenüber den Versionen, die in älteren Versionen von SQL Server verwendet werden: T-SQL WMA SQL Server 2005 verglichen mit Version 2005. Wegen der teuren Berechnungen in WMA beteiligt, könnte es eine gute Idee, um die Ergebnisse bestehen. WMA werden in der Trendanalyse genauso wie SMA verwendet. WMA hat mehr Gewicht auf die jüngsten Preisänderungen jedoch. Dieser Blog-Beitrag ist Teil einer Serie über technische Analyse, TA, in SQL Server. Siehe die anderen Beiträge hier. Geschrieben von Tomas Lind Tomas Lind - Consulting Services als SQL Server DBA und Datenbank-Entwickler bei High Coast Database Solutions AB. SQL Server T-SQL-Code, um einen bewegenden Durchschnitt zu berechnen Von: Dallas Snider Lesen Sie Kommentare Ähnliche Tipps: Weitere Funktionen - Benutzerdefinierte UDF Wie Kann ich glatt machen 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 laut und ein guter Weg zu Glätten die Daten 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: 382016


No comments:

Post a Comment