Gleitender Durchschnitt Sql




Gleitender Durchschnitt SqlIch arbeite mit SQL Server 2008 R2 und versuche, einen gleitenden Durchschnitt zu berechnen. Fur jeden Datensatz meiner Ansicht mochte ich die Werte der 250 vorherigen Datensatze sammeln und dann den Durchschnitt fur diese Selektion berechnen. Meine Ansichtsspalten sind wie folgt: TransactionID ist eindeutig. Fur jede TransactionID. Ich mochte den Durchschnitt fur Spaltenwert uber 250 Datensatze berechnen. So fur die TransactionID 300, sammeln Sie alle Werte aus fruheren 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 Datensatzen zu sammeln. Gefragt am 28. Oktober 14 um 20: 58Moving Durchschnitt - MA BREAKING DOWN Gleitender Durchschnitt - MA Als SMA Beispiel betrachten Sie eine Sicherheit mit den folgenden Schlusskursen uber 15 Tage: Woche 1 (5 Tage) 20, 22, 24, 25, 23 Woche 2 (5 Tage) 26, 28, 26, 29, 27 Woche 3 (5 Tage) 28, 30, 27, 29, 28 Eine 10-tagige MA wurde die Schlusskurse fur die ersten 10 Tage als ersten Datenpunkt ausrechnen . Der nachste Datenpunkt wurde den fruhesten Preis senken, den Preis am Tag 11 addieren und den Durchschnitt nehmen, und so weiter, wie unten gezeigt. Wie bereits erwahnt, verzogert MAs die aktuelle Preisaktion, weil sie auf vergangenen Preisen basieren, je langer der Zeitraum fur die MA ist, desto gro?er ist die Verzogerung. So wird ein 200-Tage-MA haben eine viel gro?ere Verzogerung als eine 20-Tage-MA, weil es Preise fur die letzten 200 Tage enthalt. Die Lange des zu verwendenden MA hangt von den Handelszielen ab, wobei kurzere MAs fur den kurzfristigen Handel und langerfristige MAs eher fur langfristige Anleger geeignet sind. Die 200-Tage-MA ist weithin gefolgt von Investoren und Handlern, mit Pausen uber und unter diesem gleitenden Durchschnitt als wichtige Trading-Signale. MAs auch vermitteln wichtige Handelssignale auf eigene Faust, oder wenn zwei Durchschnitte uberqueren. Eine steigende MA zeigt an, dass die Sicherheit in einem Aufwartstrend liegt. Wahrend eine sinkende MA zeigt, dass es in einem Abwartstrend ist. In ahnlicher Weise wird das Aufwartsmoment mit einem bulligen Crossover bestatigt. Die auftritt, wenn eine kurzfristige MA uber einem langerfristigen MA kreuzt. Abwarts-Momentum wird mit einem barischen Ubergang bestatigt, der auftritt, wenn eine kurzfristige MA unter einem langerfristigen MA geht. Wie man einen SQL-Moving-Average ohne Cursor-Aktualisierung berechnet: Wenn Sie mit den neuesten Versionen von SQL Server arbeiten, werden Sie Kann die Fenster-Funktionen verwenden, um die gleiche Sache zu erreichen. Ich habe den aktualisierten Code am Ende der Post. Fur 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 uber 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 konnen. 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 konnen, 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 verwenden wurden. Share this: 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 Pradikat verwenden konnten, um eine Abfrage, die uns einen gleitenden Durchschnitt geben wurde: Ist die zusatzliche 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 andern und die Berechnung des gleitenden Durchschnitts kostspielig ist, konnten Sie die Verwendung des Spaltenansatzes in Erwagung 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 fur Datenpunkte innerhalb von 24 Stunden von aktuellen Datenpunkt Gewicht0,5 fur 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, ware ein Versuch, das Histogramm zu glatten, 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 fur 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 Losung vor, die die Fensterfunktion AVG verwendet. Dieser Ansatz ist viel effizienter (klarer und weniger ressourcenintensiv) als SELF-JOIN in anderen Antworten eingefuhrt (und ich bin uberrascht, dass niemand eine bessere Losung 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 konnen Joe Celkos dirty linken au?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 23, 2010, um 10:33 Uhr Ihre Antwort 2016 Stack Exchange, IncAVG (Transact-SQL) ALL Wendet die Aggregatfunktion auf alle Werte an. ALL ist die Voreinstellung. DISTINCT Gibt an, dass AVG nur auf jeder eindeutigen Instanz eines Werts ausgefuhrt wird, unabhangig davon, wie oft der Wert auftritt. Expression Ein Ausdruck der exakten numerischen oder approximativen numerischen Datentyp-Kategorie mit Ausnahme des Bitdatentyps. Aggregatfunktionen und Unterabfragen sind nicht zulassig. OVER (partitionbyclaususe orderbyclause) partitionbyclause teilt die von der FROM-Klausel erzeugte Ergebnismenge in Partitionen, auf die die Funktion angewendet wird. Wenn nicht angegeben, behandelt die Funktion alle Zeilen der Abfrageergebnismenge als einzelne Gruppe. Orderbyclause bestimmt die logische Reihenfolge, in der die Operation ausgefuhrt wird. Eine Nachbestellung ist erforderlich. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL). Der Ruckgabetyp wird durch den Typ des ausgewerteten Ergebnisses des Ausdrucks bestimmt. Dezimal-Kategorie (p, s) Wenn der Datentyp des Ausdrucks ein Alias-Datentyp ist, ist der Ruckgabetyp auch der Alias-Datentyp. wenn die Basisdatentyp des Alias-Datentyp jedoch gefordert wird, beispielsweise von Tinyint int. Ist der Ruckgabewert vom geforderten Datentyp und nicht vom Alias-Datentyp. AVG () berechnet den Durchschnitt einer Reihe von Werten von durch die Zahlung ungleich NULL-Werte die Summe dieser Werte dividiert wird. Wenn die Summe ubersteigt den Maximalwert fur den Datentyp des Ruckgabewertes wird ein Fehler zuruckgegeben. AVG ist eine deterministische Funktion, wenn sie ohne die OVER - und ORDER BY-Klauseln verwendet wird. Sie ist nicht deterministisch, wenn sie mit den OVER - und ORDER BY-Klauseln angegeben ist. Weitere Informationen finden Sie unter Deterministische und nicht-deterministische Funktionen. A. Verwenden der SUM und AVG-Funktionen fur Berechnungen Das folgende Beispiel berechnet die durchschnittliche Urlaubsstunden und die Summe der Kranken Stunden, dass die Vizeprasidenten von Adventure Works Cycles verwendet haben. Jede dieser Aggregatfunktionen erzeugt einen einzigen Summenwert fur alle abgerufenen Zeilen. Das Beispiel verwendet die AdventureWorks2012-Datenbank.