Friday 15 September 2017

Oracle Moving Average Abfrage


Gleitender Durchschnitt in T-SQL Eine gemeinsame Berechnung in der Trendanalyse ist der bewegte (oder rollende) Durchschnitt. Ein gleitender Durchschnitt ist der Durchschnitt der zum Beispiel letzten zehn Zeilen. Der gleitende Durchschnitt zeigt eine glattere Kurve als die tatsächlichen Werte, mehr mit einer längeren Periode für den gleitenden Durchschnitt, was es zu einem guten Werkzeug für die Trendanalyse macht. Dieser Blogpost zeigt, wie man den gleitenden Durchschnitt in T-SQL berechnet. Je nach Version von SQL Server werden verschiedene Methoden verwendet. Die nachstehende Tabelle zeigt den Glättungseffekt (rote Linie) mit einem 200-tägigen gleitenden Durchschnitt. Die Aktienkurse sind die blaue Linie. Der langfristige Trend ist deutlich sichtbar. T-SQL Moving Avergage 200 Tage Die folgende Demonstration erfordert die TAdb-Datenbank, die mit dem hier befindlichen Skript erstellt werden kann. Im kommenden Beispiel werden wir für die letzten 20 Tage einen gleitenden Durchschnitt berechnen. Abhängig von der Version von SQL Server gibt es eine andere Methode, um die Berechnung zu tun. 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 nutzt 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 vor 19, da wir die aktuelle Zeile auch in die Berechnung aufnehmen werden. Wie Sie sehen können, ist die Berechnung des gleitenden Durchschnitts in SQL Server 2012 ziemlich einfach. Die folgende Abbildung zeigt das Fensterprinzip. Die aktuelle Zeile ist mit gelb markiert. Das Fenster ist mit einem blauen Hintergrund 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 gleich, so dass sie nicht wieder angezeigt werden. SQL Server 2005 8211 2008R2 Moving Average Diese Version verwendet einen gemeinsamen Tabellenausdruck. Der CTE ist 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. Der äußere Tisch kann gesagt werden, das Fenster zu enthalten, dass wir einen Durchschnitt berechnen wollen: Leistungsvergleich Wenn wir die drei verschiedenen Methoden gleichzeitig laufen und den daraus resultierenden Ausführungsplan überprüfen, gibt es einen dramatischen Unterschied in der Leistung zwischen den Methoden: Vergleich von drei Verschiedene Methoden, um gleitenden Durchschnitt zu berechnen Wie Sie sehen können, macht die Fensterfunktion Verbesserungen in SQL 2012 einen großen Unterschied in der Leistung. Wie am Anfang dieses Beitrags erwähnt, werden gleitende Mittelwerte als Werkzeug zur Veranschaulichung von Trends verwendet. Ein gemeinsamer Ansatz ist es, bewegte Durchschnitte unterschiedlicher Längen zu kombinieren, um Veränderungen in den kurz-, mittel - und langfristigen Trends zu erkennen. Von besonderem Interesse sind die Überquerung der Trendlinien. Zum Beispiel, wenn sich der kurze Trend über den langen oder mittleren Trend bewegt, kann dies 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 Zitate, Ma20, Ma50 und Ma200. T-SQL Ma20, Ma50, Ma200 kaufen und verkaufen Signale. Dieser Blog-Post ist Teil einer Serie über technische Analyse, TA, in SQL Server. Sehen Sie die anderen Beiträge hier. Geschrieben von Tomas LindThis ist eine Evergreen Joe Celko Frage. Ich ignoriere die DBMS-Plattform. Aber auf jeden Fall konnte Joe vor mehr als 10 Jahren mit Standard-SQL antworten. Joe Celko SQL Puzzles and Answers Zitat: Dieser letzte Update-Versuch schlägt vor, dass wir das Prädikat verwenden könnten, um eine Abfrage zu konstruieren, die uns einen gleitenden Durchschnitt geben würde: Ist die zusätzliche Spalte oder die Abfrage besser angegangen Die Abfrage ist technisch besser, weil der UPDATE-Ansatz wird Denormalisieren der Datenbank. Allerdings, wenn die historischen Daten aufgezeichnet werden nicht zu ändern und die Berechnung der gleitenden Durchschnitt ist teuer, können Sie die Verwendung der Spalte Ansatz. SQL Puzzle Abfrage: mit allen Mitteln einheitlich. Sie werfen einfach auf die passende Gewicht Eimer abhängig von der Entfernung von der aktuellen Zeitpunkt. Zum Beispiel quottake weight1 für datapoints innerhalb von 24hrs aus aktueller datapoint weight0.5 für datapoints innerhalb von 48hrsquot. In diesem Fall ist es wichtig, wie viel aufeinanderfolgende Datenpunkte (wie 6:12 Uhr und 11:48 Uhr) von einander entfernt sind. Ein Anwendungsfall, den ich mir vorstellen kann, wäre ein Versuch, das Histogramm zu glätten, wo Datapunkte nicht dicht genug sind, ndash msciwoj Mai 27 15 at 22:22 Ich bin mir nicht sicher, dass Ihr erwartetes Ergebnis (Output) klassisch einfaches (rollendes) Durchschnitt für 3 Tage zeigt. Denn zum Beispiel gibt das erste Dreifach von Zahlen per Definition: aber du erwartest 4.360 und seine Verwirrung. Trotzdem schlage ich die folgende Lösung vor, die die Fensterfunktion AVG verwendet. Dieser Ansatz ist viel effizienter (klar und weniger ressourcenintensiv) als SELF-JOIN in anderen Antworten eingeführt (und Im überrascht, dass niemand eine bessere Lösung gegeben hat). Sie sehen, dass AVG mit Fall verpackt wird, wenn rownum gt p. days dann, um NULLs in den ersten Reihen zu zwingen, wo 3 Tagesbewegungsmitte bedeutungslos ist. Antwortete am 23. Februar 16 um 13:12 Wir können Joe Celkos schmutzige linke äußere Verknüpfungsmethode anwenden (wie oben von Diego Scaravaggi zitiert), um die Frage zu beantworten, wie es gefragt wurde. Generiert die angeforderte Ausgabe: beantwortet Jan 9 16 at 0:33 Ihre Antwort 2017 Stack Exchange, IncUsing eine einfache gleitende Durchschnitt zu glätten Daten ist eine ziemlich beliebte 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 heißt: Berechnen Sie den gleitenden Durchschnitt aller Produktverkäufe, im Monat, im Jahr 2000. Heres was macht Es komplex: zwei referenzen auf die AVG () - Funktion, eine GROUP BY (die alle von sich aus irgendwelche SELECT einen Kopf-Scratcher macht),. Eine Stealth-WINDOW-Klausel eine WINDOW-Klausel, die nicht einmal das WINDOW-Schlüsselwort verwendet. So zu den Uneingeweihten (die Leute, die Beispiele mehr als alle anderen brauchen) ist es nicht offensichtlich, dass ein FENSTER überhaupt beteiligt ist. Nicht nur irgendeine WINDOW-Klausel, kümmere dich, aber eine, die jede einzelne Komponente enthält, die du in einem FENSTER kodieren kannst: eine PARTITION BY, eine RANGE-Klausel. Nicht eine einfache ROWS-Klausel, sondern voll-geblasen RANGE-Klausel, eine, die eine intime Beziehung mit dem ORDER BY hat. Ich weiß, was eine Reihe ist, aber was das Redakteur ist ein RANGE Aber warten, theres 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 - Berechnung eines Moving Average in Glenn Paulleys ausgezeichnetes OLAP White Paper.) Jetzt können wir wieder auf den richtigen Weg gehen: Ein wirklich wirklich einfaches Moving Average Das folgende Beispiel zeigt 10 Tage im Wert von Daten zusammen mit dem gleitenden Durchschnitt des heutigen Wertes und gestern: Die WINDOW-Klausel auf den Zeilen 21 bis 23 definiert ein Bewegtfenster, das zwei Zeilen enthält: Zeilenzeile (CURRENT ROW) und gestern Zeile (1 PRECEDING): Die FENSTER ORDER BY-Klausel bestimmt, was PRECEDING bedeutet (die vorhergehende Zeile von t. entrydate) und die ROWS-Klausel bestimmt die Größe des Fensters (immer zwei Zeilen). Der Ausdruck AVG (t. value) OVER twodays auf Zeile 19 bezieht sich auf die WINDOW-Klausel mit Namen und es sagt SQL Anywhere, dass der Durchschnitt der beiden Werte von t. value berechnet wird, die im 2-reihigen Schiebefenster vorhanden sind Zeile in der Ergebnismenge. Also, für 2012-02-02 der Durchschnitt von 10 und 20 ist 15.000000, für 2012-02-03 der Durchschnitt von 20 und 10 ist 15.000000, für 2012-02-04 der Durchschnitt von 10 und 30 ist 20.000000, für 2012- 02-10 Der Durchschnitt von 10 und 60 ist 35.000000. Oops, was ist mit der ersten Reihe Die 2012-02-01 Reihe hat keine PRECEDING Zeile, also was ist der Durchschnitt über dem bewegten Fenster Nach Glenn Paulleys Weißbuch im Fall eines beweglichen Fensters wird angenommen, dass Zeilen, die Null enthalten Werte existieren vor der ersten Zeile und nach der letzten Zeile in der Eingabe. Das bedeutet, wenn das bewegte Fenster 2012-02-01 als CURRENT ROW hat, enthält die 1 PRECEDING Zeile NULL-Werte. Und wenn SQL Anywhere ein AVG () berechnet, das einen NULL-Wert enthält, zählt es überhaupt nicht das NULL. Nicht im Zähler oder im Nenner bei der Berechnung des Durchschnitts. Heres Beweis: Thats warum twodayaverage 10.000000 für die erste Reihe 2012-02-01. Geschrieben von Breck Carter um 3:47 PM

No comments:

Post a Comment