Sunday 5 February 2017

Gleitende Durchschnittliche Funktion In Sql

Gleitender Durchschnitt in T-SQL Eine gängige Berechnung in der Trendanalyse ist der gleitende (oder rollende) Durchschnitt. Ein gleitender Durchschnitt ist der Durchschnitt der letzten 10 Zeilen. Der gleitende Durchschnitt zeigt eine glattere Kurve als die tatsächlichen Werte, mehr also mit einer längeren Periode für den gleitenden Durchschnitt, was es zu einem guten Werkzeug für die Trendanalyse macht. Dieser Blogpfosten zeigt, wie man den gleitenden Durchschnitt in T-SQL berechnet. Abhängig von der Version von SQL Server werden unterschiedliche Methoden verwendet. Die nachstehende Tabelle zeigt den Glättungseffekt (rote Linie) mit einem 200 Tage gleitenden Durchschnitt. Die Aktienkurse sind die blaue Linie. Der langfristige Trend ist deutlich sichtbar. T-SQL Moving Avergage 200 Tage Die folgende Demonstration benötigt die TAdb-Datenbank, die mit dem hier befindlichen Skript erstellt werden kann. Im nächsten Beispiel wird ein gleitender Durchschnitt für die letzten 20 Tage berechnet. Abhängig von der Version von SQL Server gibt es eine andere Methode, um die Berechnung durchzuführen. Und, wie wir später sehen werden, haben die neueren Versionen von SQL Server Funktionen, die eine viel effektivere Berechnung ermöglichen. SQL Server 2012 und höher Moving Average Diese Version verwendet eine aggregierte Fensterfunktion. Was ist neu in SQL 2012 ist die Möglichkeit, die Größe des Fensters zu beschränken, indem Sie angeben, wie viele Zeilen vor dem Fenster enthalten sollten: Zeilen vorangegangen ist 19, weil wir die aktuelle Zeile auch in die Berechnung enthalten. Wie Sie sehen können, ist die Berechnung der gleitenden Durchschnitt in SQL Server 2012 ziemlich einfach. Die Abbildung unten zeigt das Fensterprinzip. Die aktuelle Zeile ist mit gelb markiert. Das Fenster ist blau markiert. Der gleitende Durchschnitt ist einfach der Durchschnitt von QuoteClose in den blauen Linien: T-SQL Moving Average Fenster. Die Ergebnisse der Berechnungen in älteren Versionen von SQL Server sind identisch, so dass sie nicht erneut angezeigt werden. SQL Server 2005 8211 2008R2 Moving Average Diese Version verwendet einen gemeinsamen Tabellenausdruck. Der CTE wird selbst referenziert, um die letzten 20 Zeilen für jede Zeile zu erhalten: Moving Average vor SQL Server 2005 Die pre 2005-Version wird eine linke äußere Verknüpfung zu der gleichen Tabelle verwenden, um die letzten 20 Zeilen zu erhalten. Die äußere Tabelle kann gesagt werden, um das Fenster, das wir wollen, um einen Durchschnitt zu berechnen: Performance-Vergleich Wenn wir die drei verschiedenen Methoden gleichzeitig und überprüfen Sie die resultierende Ausführung Plan, gibt es einen dramatischen Unterschied in der Leistung zwischen den Methoden: Vergleich von drei Verschiedene Methoden, um den gleitenden Durchschnitt zu berechnen Wie Sie sehen können, macht die Verbesserung der Fensterfunktion in SQL 2012 einen großen Unterschied in der Leistung. Wie bereits am Anfang dieses Beitrags erwähnt, werden gleitende Durchschnittswerte als Trends verwendet. Ein gemeinsamer Ansatz besteht darin, Bewegungsdurchschnitte verschiedener Längen zu kombinieren, um Veränderungen in der kurz-, mittel - und langfristigen Entwicklung zu erkennen. Von besonderem Interesse sind die Übergänge der Trendlinien. Zum Beispiel, wenn sich der kurze Trend über den langen oder mittleren Trend bewegt, kann dieser als Kaufsignal in der technischen Analyse interpretiert werden. Und wenn sich der kurze Trend unter einer längeren Trendlinie bewegt, kann dies als Verkaufssignal interpretiert werden. Die folgende Tabelle zeigt Quotes, Ma20, Ma50 und Ma200. T-SQL Ma20, Ma50, Ma200 kaufen und verkaufen Signale. Dieser Blog-Beitrag ist Teil einer Serie über technische Analyse, TA, in SQL Server. Siehe die anderen Beiträge hier. Geschrieben von Tomas LindWeighted gleitenden Durchschnitt in T-SQL In einem früheren Beitrag habe ich die Berechnung der gleitenden Durchschnitte in T-SQL gezeigt. 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-Dienstleistungen als SQL Server DBA und Datenbank-Entwickler bei High Coast Database Solutions AB. Ich arbeite mit SQL Server 2008 R2, versucht, 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 28. Oktober 14 um 20:58 Uhr


No comments:

Post a Comment