Monday 12 June 2017

How To Calculate Moving Average In Sql

Dies ist eine Evergreen Joe Celko Frage. Ich ignoriere, welche DBMS-Plattform verwendet wird. Aber auf jeden Fall Joe war in der Lage, mehr als 10 Jahren mit Standard-SQL zu beantworten. Joe Celko SQL Puzzles und Antworten Zitat: Der letzte Update-Versuch deutet darauf hin, dass wir das Prädikat verwenden könnten, um eine Abfrage, die uns einen gleitenden Durchschnitt geben würde: Ist die zusätzliche Spalte oder die Abfrage Ansatz besser Die Abfrage ist technisch besser, weil die UPDATE-Ansatz wird Denormalisierung der Datenbank. Wenn jedoch die historischen Daten, die aufgezeichnet werden, sich nicht ändern und die Berechnung des gleitenden Durchschnitts kostspielig ist, könnten Sie die Verwendung des Spaltenansatzes in Erwägung ziehen. SQL Puzzle-Abfrage: mit allen Mitteln einheitlich. Sie werfen nur auf den entsprechenden Gewichtskorb je nach Entfernung vom aktuellen Zeitpunkt. Zum Beispiel quottake Gewicht1 für Datenpunkte innerhalb von 24 Stunden von aktuellen Datenpunkt Gewicht0,5 für Datenpunkte innerhalb von 48hrsquot. In diesem Fall ist es wichtig, wieviel aufeinander folgende Datenpunkte (wie 6:12 Uhr und 11:48 Uhr) voneinander entfernt sind. Ein Anwendungsfall, den ich mir vorstellen kann, wäre ein Versuch, das Histogramm zu glätten, wo Datenpunkte nicht dicht genug sind ndash msciwoj Mai 27 15 at 22:22 Im nicht sicher, dass Ihr erwarteten Ergebnis (Ausgang) zeigt klassische einfache bewegen (rolling) Durchschnitt für 3 Tage. Denn zum Beispiel gibt das erste Dreibettzimmer von Zahlen per Definition: aber man erwartet 4.360 und seine Verwirrung. Trotzdem schlage ich die folgende Lösung vor, die die Fensterfunktion AVG verwendet. Dieser Ansatz ist viel effizienter (klarer und weniger ressourcenintensiv) als SELF-JOIN in anderen Antworten eingeführt (und ich bin überrascht, dass niemand eine bessere Lösung gegeben hat). Sie sehen, dass AVG wird mit Fall verpackt, wenn rownum gt p. days dann zu zwingen, NULL s in ersten Zeilen, wo 3 Tage Moving Average ist sinnlos. Wir können Joe Celkos dirty linken äußeren Join-Methode (wie zitiert von Diego Scaravaggi) anwenden, um die Frage zu beantworten, wie es gefragt wurde. Generiert die angeforderte Ausgabe: Antwort # 2 am: Januar 9, 2010, 10:33 Uhr Ihre Antwort 2016 Stack Exchange, IncI arbeiten mit SQL Server 2008 R2, versuchen, 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: 58Moving Durchschnitt in T-SQL Eine gemeinsame Berechnung in der Trend-Analyse ist die bewegte (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. Verwendung Wie zu Beginn dieses Beitrags erwähnt, sind gleitende Durchschnitte als Werkzeug zur Veranschaulichung Trends verwendet. Ein gemeinsamer Ansatz ist gleitende Durchschnitte mit unterschiedlichen Längen zu kombinieren, um jeweils Änderungen in der kurz-, mittel - und langfristige Trends zu erkennen. Von besonderem Interesse sind die Übergänge der Trendlinien. Zum Beispiel, wenn der kurze Trend über die lange oder mittlere Trend bewegt, kann dies als Kaufsignal in der technischen Analyse interpretiert werden. Und wenn 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 LindHow eine SQL zu ermitteln, ohne einen Cursor aktualisieren Moving Average: Wenn Sie mit den neuesten Versionen von SQL Server arbeiten, können Sie die Windowing-Funktionen nutzen zu können, das Gleiche zu erreichen. Ich habe den aktualisierten Code am Ende der Post. Für dieses Video, Ich mag immer noch den Gedanken Prozess der Verankerung zu einem Datum. Video: 3-Tage-Moving-Average in SQL Eine effiziente Methode, um einen gleitenden Durchschnitt in SQL mit Hilfe einiger Tricks zu berechnen, um Datum-Anker festzulegen. Es gibt Debatten über den besten Weg, um einen SQL Moving Average in SQL Server zu tun. Einige Leute denken, es gibt Zeiten, wenn ein Cursor am effizientesten ist. Andere denken, dass Sie alles in einer Set-basierte Weise ohne den Cursor tun können. Neulich wollte ich einen gleitenden Durchschnitt berechnen und mein erster Gedanke war, einen Cursor zu benutzen. Ich habe einige schnelle Forschung und fand dieses Forum Frage: Moving Average in TSQL Es gibt einen Beitrag, der eine Unterabfrage mit einem Anker Datum, um zu finden, die 1 und 2-Tage-Offset zeigt. Hier ist das Skript, das Sie verwenden können, um die 3 Tage SQL Moving Average Endresultat zu testen. Hier ist die abschließende Frage. Hier ist die Abfrage, die Sie mit SQL Server 2012 Teilen verwenden würde dies: Wie berechnen Mittelwerte Führen Sie den folgenden T-SQL-Skript in Microsoft SQL Server Management Studio-Abfrage-Editor Verschieben der 2-Monats-Durchschnittswerte für die Anzahl der Anbieter zu berechnen Fahrrad Versorgung Teile Adventure Zyklen, einem fiktiven Mountainbike Hersteller: - (... Sequenz int Jahr int Monat int UniqueVendors int) T-SQL-60-Tage gleitenden Durchschnitt Berechnung USE AdventureWorks2008 ERKLÄREN VendorsByMonth Tabelle INSERT VendorsByMonth SELECT ROWNUMBER () OVER (ORDER BY Jahr (Bestelldatum), Monat (Bestelldatum)), Jahr (Bestelldatum), Monat (Bestelldatum), 0 aus dem Einkauf. PurchaseOrderHeader GROUP DURCH Jahr (OrderDate), Monat (OrderDate) DECLARE i int SET i 2 WHILE (iLt (SELECT MAX (Sequenz) FROM VendorsByMonth)) BEGIN UPDATE m SET m. UniqueVendors (SElect count (Unterschiedliche VendorID) vom Einkauf PurchaseOrderHeader poh WHERE m Jahr Jahr (poh. OrderDate) und m. Monat Monat (poh. OrderDate) OR mp. Jahr Jahr (poh. OrderDate) und mp. Monat Monat (poh )) FROM VendorsByMonth m CROSS JOIN VerkäuferByMonth mp WHERE m. Sequenz i & ndash; Sequenz i - 1 SET ii 1 END - AUSWÄHLEN VON VendorsByMonth ORDER BY Sequenz GO / Sequenz Jahr Monat UniqueVendors 1 2001 5 0 2 2002 1 28 3 2002 2 64 4 2002 3 68 5 2002 4 64 6 2002 5 56 7 2002 6 20 8 2002 7 48 9 2002 8 52 10 2002 9 36 11 2002 10 48 12 2002 11 44 ​​13 2003 3 40 14 2003 5 56 15 2003 6 79 16 2003 7 68 17 2003 8 24 18 2003 9 79 19 2003 10 79 20 2003 11 79 21 2003 12 82 22 2004 1 82 23 2004 2 81 24 2004 3 82 25 2004 4 81 26 2004 5 81 27 2004 6 81 28 2004 7 81 29 2004 8 81 30 2004 9 79 31 2004 10 49


No comments:

Post a Comment