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. Dieser Fall zählt es, wie viel Mal in Folge Datenpunkte (wie 6.12 und 11.48) entfernt sind voneinander Ein Anwendungsfall ich denken kann ein Versuch wäre, das Histogramm zu glätten, wo Datenpunkte sind nicht dicht genug ndash msciwoj 27. Mai 15 an 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. Beantwortet Joe Celkos dirty linken äußeren Join-Methode (wie zitiert von Diego Scaravaggi) auf die Frage zu beantworten, wie es gefragt wurde. Generiert die angeforderte Ausgabe: answered Jan 21, 2010 at 0:33 Ihre Antwort 2017 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 ausgeführt wird, unabhängig 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 zulässig. 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 ausgeführt wird. Eine Nachbestellung ist erforderlich. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL). Der Rückgabetyp wird durch den Typ des ausgewerteten Ergebnisses des Ausdrucks bestimmt. Dezimal-Klasse (p, s) Ist der Datentyp des Ausdrucks ein Alias-Datentyp, so ist auch der Rückgabetyp vom Alias-Datentyp. Wenn jedoch der Basisdatentyp des Alias-Datentyps gefördert wird, beispielsweise von tinyint nach int. Ist der Rückgabewert vom geförderten Datentyp und nicht vom Alias-Datentyp. AVG () berechnet den Durchschnitt eines Wertsatzes, indem er die Summe dieser Werte durch die Anzahl der Nichtnullwerte dividiert. Wenn die Summe den Maximalwert für den Datentyp des Rückgabewertes überschreitet, wird ein Fehler zurückgegeben. 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 wird. Weitere Informationen finden Sie unter Deterministische und nicht-deterministische Funktionen. A. Verwendung der SUM - und AVG-Funktionen für Berechnungen Das folgende Beispiel berechnet die durchschnittlichen Urlaubszeiten und die Summe der Krankenstunden, die die Vizepräsidenten von Adventure Works Cycles verwendet haben. Jede dieser Aggregatfunktionen erzeugt einen einzigen Summenwert für alle abgerufenen Zeilen. Das Beispiel verwendet die AdventureWorks2012 database. SQL Server T-SQL-Code, um einen bewegenden Durchschnitt zu berechnen Von: Dallas Snider Lesen Sie Kommentare Verwandte Tipps: Weitere Funktionen - Benutzerdefinierte UDF Wie kann ich die Daten in einer Spalte mit einem gleitenden Durchschnitt in T-SQL Können Sie bitte durch ein Beispiel in SQL Server mit T-SQL-Code gehen Wie können wir die Ergebnisse validieren Zeitreihe Daten können von Natur aus laut und ein guter Weg, um die Daten zu glätten ist ein gleitender Durchschnitt zu berechnen. Es gibt eine Reihe von Möglichkeiten, um einen gleitenden Durchschnitt in T-SQL zu berechnen, aber in diesem Tipp werden wir uns einen Weg ansehen, um einen gleitenden Durchschnitt zu berechnen, der das Mittelungsfenster x Anzahl der Zeilen hinter und x Zahl der Zeilen vor dem aktuellen Wert festlegt Datenzeile. Der Vorteil ist, dass es keine Verzögerung in den durchschnittlichen Wert zurückgegeben und der gleitende Mittelwert ist auf der gleichen Zeile mit seinem aktuellen Wert. Beginnen wir mit dem Erstellen einer Tabelle und dem Laden einiger Daten mit dem T-SQL unten. Wir haben 361 Datenpunkte, die eine verrauschte Sinuswelle erzeugen. Nach dem Laden der Daten führen wir den folgenden T-SQL-Code aus, um alle Spalten zusammen mit dem gleitenden Mittelwert auszuwählen. Im folgenden Code ist die gleitende durchschnittliche Fenstergröße 15 (7 Zeilen vor der aktuellen Zeile plus der aktuellen Zeile plus 7 Zeilen). Der gleitende Durchschnitt der Spalte DataValue wird als Spalte MovingAverageWindowSize15 zurückgegeben. Die ORDER BY-Klausel ist extrem wichtig, um die Daten in der richtigen Reihenfolge zu halten. Wir können die Ergebnisse kopieren und in Excel einfügen, um die Berechnung zu überprüfen. Im Bild unten beginnt das Fenster in Zelle C3 und endet bei C17. Der gleitende Durchschnitt, der von dem T-SQL in diesem Tipp berechnet wird, erscheint in Zelle D10. Der von Excel berechnete Durchschnitt ist am unteren Rand und er ist gleich dem Wert in D10. In der folgenden Abbildung sehen wir die ursprünglichen Datenwerte in blau mit dem gleitenden Durchschnitt in Rot aufgetragen. Nächste Schritte Passen Sie die Größe des gleitenden Durchschnittsfensters an, um zu sehen, wie sich das Diagramm ändert. Seien Sie auch sicher, diese anderen Spitzen auf T-SQL von mssqltips heraus zu überprüfen: Letztes Update: 382016
No comments:
Post a Comment