Sunday 2 July 2017

Verschieben Durchschnitt In Sql Server 2008 R2

Ich versuche, eine Funktion zu erstellen, die einen gleitenden gleitenden Durchschnitt in SQLServer 2008 berechnet. Ich bin ganz neu in SQL, damit ich eine ziemlich große Schwierigkeit habe. Die Daten, die ich versuche, um die gleitenden Durchschnitt auf Gruppierung nach Tag gruppiert werden müssen (es ist alle Zeitstempel Daten) und dann ein variables Gleitende durchschnittliche Fenster muss angewendet werden. Ich habe bereits eine Funktion, die die Daten nach Tag (und id) gruppiert, die unten angezeigt wird. Ich habe ein paar Fragen: Wäre es besser, die Gruppierungsfunktion innerhalb der gleitenden Durchschnittsfunktion aufzurufen oder sollte ich es alle auf einmal tun? Ist es möglich, den gleitenden Durchschnitt für die eingegebenen Daten in die Funktion zu erhalten, aber gehen Sie zurück n Tage zu Beginnen Sie den gleitenden Durchschnitt, so dass die ersten n Tage der zurückgegebenen Daten nicht 0 für ihren Durchschnitt haben (dh wenn sie einen 7 Tage gleitenden Durchschnitt vom 01-08-2011 zu 02-08-2011 wünschen, dass ich den gleitenden Durchschnitt beginne Berechnung am 01-01-2011, so dass der erste Tag, den sie definiert haben einen Wert) Ich bin in den Prozess der Suche, wie man den gleitenden Durchschnitt zu tun, und wissen, dass ein bewegliches Fenster scheint die beste Option zu sein (CurrentSum prevSum todayCount - NthDayAgoCount) nDays, aber ich bin immer noch auf die Berechnung der SQL-Implementierung dieser Arbeit. Ich habe eine Gruppierung Funktion, die wie folgt aussehen (einige Variablen für Sichtbarkeit entfernt): Was eine Tabelle wie folgt zurückgibt: EDIT: Um die erste Frage zu beantworten, fragte ich: Ich habe eine Funktion erstellt, die eine temporäre Tabelle deklariert und die Ergebnisse eingefügt Aus der Zählfunktion in sie, dann verwendet das Beispiel von user662852, um den gleitenden Durchschnitt zu berechnen. Nehmen Sie den hartcodierten Datumsbereich aus Ihrer Abfrage heraus. Schreiben Sie die Ausgabe (wie Ihre Probe am Ende), um eine Temp-Tabelle (ich nannte es Besuche unten). Ich habe nicht genug Platz in Comments, um dies in Reaktion auf Ihre Frage zu sagen: Mein Join ist irgendwie kartesisch, weil es eine zwischen in der Join-Einschränkung verwendet. Jeder Datensatz in der Liste geht auf jeden anderen Datensatz, und dann möchte ich die, wo das Datum, das ich berichte, zwischen einer unteren Grenze von (-7) Tagen und heute ist. Jedes Datendatum steht zum Listendatum zur Verfügung, dies ist der Schlüssel zu Ihrer Frage. Ich konnte die Join-Bedingung als geschrieben haben Aber was wirklich geschehen war, dass ich es getestet habe, die keine Datensätze zurückgibt, weil die Syntax zwischen LOW und HIGH ist. Ich Facepalmed auf 0 Datensätze und vertauschte die Argumente, das ist alles. Versuchen Sie die folgenden, sehen, was ich meine: Dies ist der kartesische Join für nur ein Listdate: Vergleichen Sie dies mit der tatsächlichen Join-Bedingung Siehe, wie Listendatum zwischen datadate und dataplus6 in allen recordsMoving Durchschnitt in T-SQL Eine gemeinsame Berechnung in Trend-Analyse Ist der sich bewegende (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: Leistungsvergleich Wenn wir die drei verschiedenen Methoden gleichzeitig ausführen und überprüfen Sie die resultierende Ausführung Plan gibt es einen dramatischen Leistungsunterschied 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 Lind


No comments:

Post a Comment