Friday 28 July 2017

Moving Average Sql Server 2008


Ich versuche, eine laufende durchschnittliche Spalte in der SELECT-Anweisung auf der Grundlage einer Spalte aus den n vorherigen Zeilen in der gleichen SELECT-Anweisung zu haben. Der Durchschnitt, den ich benötige, basiert auf den vorherigen Zeilen im Ergebnis. Die ersten 3 Zeilen der mittleren Spalte Sind null, weil es keine vorherigen Zeilen gibt Die Zeile 4 in der mittleren Spalte zeigt den Durchschnitt der Nummer Spalte aus den vorherigen 3 Zeilen. Ich brauche etwas Hilfe versuchen, eine SQL Select-Anweisung zu konstruieren, die dies tun wird. Ein einfacher Selbstverknüpfung scheint Um viel besser zu spielen als eine Zeile, die auf Unterabfrage verweist. Generate 10k Zeilen von Testdaten. Ich würde den Spezialfall der ersten 3 Zeilen aus der Hauptabfrage ziehen, können Sie UNION ALLE die zurück, wenn Sie es wirklich in der Zeile setzen wollen Self-Join-Abfrage. Unter meiner Maschine dauert es etwa 10 Sekunden, die Unterabfrage Ansatz, dass Aaron Alton demonstriert dauert etwa 45 Sekunden, nachdem ich es geändert, um meine Test-Source-Tabelle widerspiegeln. Wenn Sie ein SET STATISTICS PROFILE ON, können Sie sehen, die Selbst beitreten Hat 10k auf der ta Spule Die Unterabfrage hat 10k-Ausführungen auf dem Filter, Aggregat und anderen Schritten. Ich arbeite mit SQL Server 2008 R2 und versuche, einen gleitenden Durchschnitt zu berechnen Für jeden Datensatz in meiner Ansicht möchte ich die Werte der 250 vorherigen sammeln Datensätze und dann berechnen Sie den Durchschnitt für diese Auswahl. Meine Ansicht Spalten sind wie folgt. TransactionID ist eindeutig Für jede TransactionID möchte ich den Durchschnitt für Spaltenwert berechnen, über vorherige 250 Datensätze Also für TransactionID 300, sammle alle Werte aus früheren 250 Zeilenansicht wird absteigend sortiert von TransactionID und dann in Spalte MovAvg schreiben das Ergebnis des Durchschnitts dieser Werte Ich bin auf der Suche nach Daten in einem Bereich von records. asked Okt 28 14 bei 20 58.Rolling Averages in SQL Server. Aggregate Funktionen sind Bequem, sie lösen ein geschäftliches Bedürfnis und sie machen die Entwicklung leicht Leider sind nicht alle Geschäftsanforderungen so einfach zu lösen Lassen Sie uns auf ein Beispiel rollenden Durchschnitte schauen. Der Rolling Average ist ein durchschnittlicher Rolling Average Einfaches Konzept ein Durchschnitt wird über eine feste Teilmenge von Daten berechnet Rolling durchschnittliche Berechnungen werden am häufigsten mit Zeitreihen-Daten verwendet und helfen, kurzfristige Schwankungen zu entfernen, während Hervorhebung langfristige Trends Utility-Rechnungen oft mit einem rollenden Durchschnitt des Verbrauchs zu helfen, den Kunden verstehen ihre Nutzung Die Konsumenten waren nicht besorgt über den Stromverbrauch, der an einem Tag im August hoch war, als es eine Hitzewelle gab, die sie sehen wollen, wie sich ihr Verbrauch im Laufe der Zeit ändert. Die Mittelwerte mit den üblichen Tabellenausdrücken 2005 2008R2.Starten mit SQL Server 2005 wurde es einfach Um einen rollenden Durchschnitt in einer einzigen T-SQL-Anweisung mit einem Common Table Expression CTEs schnell populär zu werden, wurde eine unglaubliche Menge an zuvor schwierigen Funktionalität durch CTEs einschließlich rekursiver Abfragen und Rolling-Durchschnitte möglich gemacht. Schauen Sie sich dieses Beispiel in der AdventureWorks2012-Beispieldatenbank an. Während nicht die einfachste Annäherung an den Aufbau eines rollenden Durchschnittes, Der CTE schafft es, den Job zu erledigen In dieser Abfrage verwenden wir den CTE, um einen Arbeitstisch zu erstellen und dann eine Selbstverknüpfung durchzuführen. Dies ist mit einer temporären Tabelle oder Tabellenvariable möglich, aber der CTE erreicht ihn Eine Aussage und ist, wohl, leichter zu lesenmon Tabelle Ausdrücke auch verstecken ein dunkles Geheimnis SQL Server führt den CTE Körper jedes Mal, wenn der CTE-Ausdruck, cte in diesem Beispiel referenziert wird Je komplexer die gemeinsame Tabelle Expression ist, desto mehr Arbeit, die hat Durchgeführt werden Wenn Sie diesen Rolling-Durchschnitt mit STATISTICS IO einschalten, ist es einfach, die Mehrfachausführungen in Form von zwei Scans auf jedem Tisch zu sehen. In einer Datenbank, die dieses kleine ist, ist dies keine großen Leistungsprobleme, aber das wird groß Probleme für eine mäßig große Datenbank. Rolling-Mittelwerte mit Fenster-Funktionen 2012 und beyond. SQL Server 2012 zur besseren Unterstützung für Fenster-Funktionen Obwohl Unterstützung für OVER war bereits in SQL Server 2005, SQL Server 2012 Brin Gs erheblich mehr Funktionalität zum Tisch Mit der ROW - oder RANGE-Klausel der Fensterfunktion ist es möglich, die Abfrage zu vereinfachen und die Leistung zu verbessern. Werfen Sie einen Blick Obwohl die beiden Abfragen bemerkenswert anders sind, ist der größte Unterschied bei der Einführung von ROWS 12 PRECEDING Das geht an die Stelle des Selbstvermittlers in das vorhergehende Beispiel Anstatt sich selbst einen Beitrag zu machen, sagen wir einfach SQL Server, dass wir einen Durchschnitt von st über die letzten 12 Reihen nach Jahr und Monat sortiert haben. Was für eine Wirkung hat das Auf der Arbeit SQL Server führt.111 liest statt 369 liest Diese Änderung macht deutlich für eine erhebliche Leistungsverbesserung für SQL Server Wir haben die Anzahl der Lesungen reduziert, eliminiert einige Abfrage Komplexität und machte es etwas offensichtlich für die zukünftigen Entwickler, wie sie konnten Modifizieren oder bauen auf diese gehen vorwärts Ändern der neuen Abfrage zu einem rollenden Durchschnitt am Tag statt nach Monat ist einfach und erfordert noch weniger Zeilen Code Dies führt den Namen E Anzahl der logischen und physischen liest als das monatliche rollende Durchschnitt mit einem Fenster function. There Sie haben es zwei verschiedene Möglichkeiten, um einen rollenden Durchschnitt in SQL Server Eine Methode ist eindeutig viel einfacher als die anderen Es gibt eine Reihe von Optimierungen in SQL Server 2012, um es Ihnen leicht zu machen, diese Funktionalität zu erstellen und gleichzeitig die SQL Server-Leistung zu verbessern. Danke an Jeremiah bin ich gerade in der Mitte der Migration eines 2008R2-Systems, das SMA EMA MACD s zu SQL 2012 berechnet. Es ist mit R2 S Fenster-Funktion ÜBER, aber muss ROWNUMBER verwenden und ein wenig extra Mathe wegen des Mangels an der neuen 2012 ROWS PRECEDING Klausel I LOVE die neue ROWS PRECEDING Und Leistung ist WAY schneller im Jahr 2012 als es war in R2 Danke für die Beispiele. Sie sind willkommen Dank für das Teilen ein bisschen über Ihren Gebrauchfall, den Sie auf eine andere Technik getroffen haben, die ich mit etwas moderaten Erfolg auf SQL Server 2008R2 und früher kombiniert ROWNUMBER mit einem semi-beitreten, um SUM AVG usw. zu führen, hoffe ich Ihr Migration geht reibungslos.

No comments:

Post a Comment