Friday, November 25, 2016

Verschieben Der Durchschnittlichen Abfrage

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. Wenn Sie mit den neuesten Versionen von SQL Server arbeiten, können Sie die Fensterfunktionen verwenden, um zu vollenden. Zum Anfang Die Informationen in diesem Artikel beziehen sich auf:? das gleiche. 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 verwenden möchten. Freigeben: AVG (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-Kategorie (p, s) Wenn der Datentyp des Ausdrucks ein Alias-Datentyp ist, ist der Rückgabetyp auch der Alias-Datentyp. wenn die Basisdatentyp des Alias-Datentyp jedoch gefördert wird, beispielsweise von Tinyint int. Ist der Rückgabewert vom geförderten Datentyp und nicht vom Alias-Datentyp. AVG () berechnet den Durchschnitt einer Reihe von Werten von durch die Zählung ungleich NULL-Werte die Summe dieser Werte dividiert wird. Wenn die Summe übersteigt den Maximalwert für den Datentyp des Rückgabewertes 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 ist. Weitere Informationen finden Sie unter Deterministische und nicht-deterministische Funktionen. A. Verwenden der SUM und AVG-Funktionen für Berechnungen Das folgende Beispiel berechnet die durchschnittliche Urlaubsstunden und die Summe der Kranken Stunden, dass die Vizepräsidenten von Adventure Works Cycles verwendet haben. Jede dieser Aggregatfunktionen erzeugt einen einzigen Summenwert für alle abgerufenen Zeilen. Das Beispiel verwendet das AdventureWorks2012 database. Calculating Summen Laufende und Moving Averages in Microsoft Access mit Total Access Statistik Microsoft Access nicht integrierte Funktionen bieten zu laufenden Summen berechnen. Laufende Summen sind Zusammenfassungen über eine festgelegte Anzahl von Datensätzen. Zum Beispiel eine 30-Tage-Durchschnitt, die youd für jeden Datensatz auf seinen Wert und seine früheren 29 Datensätze zu berechnen möchten. Glücklicherweise führt die Total Access-Statistik eine Vielzahl von Berechnungen für Ihre Datensätze durch: Führen Sie Zusammenfassungen für einen bewegten Satz von Datensätzen aus, um Summen, Durchschnittswerte, Minimum, Maximum, Bereich, Median, Standardabweichung usw. zu berechnen Feld in Ihrer Datenquelle Analysieren Sie die Daten in Ihren Access-Tabellen und - Anfragen (einschließlich der verknüpften Daten) Unterstützung von Gruppierung auf Feldwerten, sodass Sie mehrere Analysen in einem Durchgang durchführen können Gesamtzugriffsstatistiken für Microsoft Access 2007 und X.7 hinzugefügt wurden Versionen für Access 2003 und früher. Ausführen von Totals Übersicht Laufende Summen sind Berechnungen für eine festgelegte Anzahl von Datensätzen über Ihre Tabelle oder Abfrage. Erzeugen Sie Ergebnisse wie Summen, Mittelwerte, Minimum, Maximum, Median usw. und fügen Sie diese in Felder in Ihrer Datenquelle ein. Diese Berechnungen sind verfügbar: Normal (Mean) Zählen Beobachtungen Summe Summe Squared Minimum Maximum Standardabweichung: Abweichung Varianzkoeffizient Standardfehler Median Modus Modus Count Geometrisches Mittel harmonischen Durchschnitt Root Mean Square Schiefe Kurtosis Standardfehler der Schiefe Standardfehler der Kurtosis bis zu fünf Felder In Ihrer Tabelle können auf einmal aktualisiert werden. Berechnen des Gesamtbetrages Zum Beispiel können Sie den Durchschnitt der letzten 10 Datensätze berechnen. Dieser gleitende Durchschnitt wird auf der Grundlage der Sortierreihenfolge Ihrer Daten bestimmt, wobei der Mittelwert für diese 10 Datensätze berechnet und in ein Feld gesetzt wird, das Sie mit dem Datensatz 10 angeben. Für Datensatz 11 wird Datensatz 1 ignoriert und die Berechnung für Datensätze 2 bis ausgeführt 11, etc. Wie die anderen Funktionen können Sie Gruppenfelder angeben, so dass jede Gruppe ihre eigenen laufenden Summen hat. Diese Funktion erstellt keine separate Tabelle. Die Ergebnisse werden in die Felder, die Sie in Ihrer Datenquelle angeben, platziert. Laufende Summen Feldauswahl Die Feldauswahl-Bildschirm für Summen ausführen, können Sie die Felder angeben, die Art auf und die Felder, um die Ergebnisse zu platzieren: Gruppenfelder können Sie für jede Kombination von eindeutigen Werten unter den Gruppenfeldern einen separaten Satz von Analyse generieren. Die Sortierfelder bestimmen die Sortierreihenfolge Ihrer Datensätze, um die laufenden Werte zu berechnen. Geben Sie mindestens ein Sortierfeld an. Dies kann das Feld, das Sie die Berechnungen auf. Die Felder werden in aufsteigender Reihenfolge sortiert. Geben Sie bis zu fünf Felder für die Aktualisierung mit Ihren Gesamtsummen an. Stellen Sie sicher, dass die Felder Datentypen sind, die die von Ihnen erwarteten Daten enthalten können. Sie sollten z. B. doppelt sein, wenn Sie Werte wie Durchschnitt (Mittelwert), Varianz usw. speichern möchten. Ausführen von Gesamtoptionen Nach Auswahl der Felder werden die Optionen Laufende Summen angezeigt: Feld zum Analysieren Geben Sie das Feld an, auf dem die Berechnungen basieren. Dieses Feld kann ein Feld sein, das als ein Sortierfeld angegeben wurde. Sie können z. B. den laufenden Durchschnitt auf der Grundlage des Verkaufs in aufsteigender Reihenfolge sortieren. Anzahl der Datensätze, um Summen zu berechnen Geben Sie die Anzahl der Datensätze in der bewegten Summe an. Wenn Sie 0 angeben, werden die Summen für jeden Datensatz berechnet. Wenn Sie eine bestimmte Zahl eingeben, basieren die Berechnungen auf dieser Anzahl von Datensätzen. Der erste Datensatz wird gelöscht, wenn die nächste zugegeben wird, und die Berechnungen basieren auf diese Gruppe von Datensätzen zu bewegen. Erste Reihe von Datensätzen Wenn Sie die Anzahl der Datensätze angeben zu berechnen Summen über, gibt es eine Option, um zu bestimmen, was passiert, bevor Sie diese Anzahl der Datensätze erreichen. Entweder sollten die Summen auf der Grundlage der verarbeiteten Datensätze übersprungen oder berechnet werden. Wählen Sie Berechnen, um die laufenden Summen anzuzeigen, unabhängig davon, ob die Anzahl der bewegten Datensätze erreicht ist. Wählen Sie leer lassen nur laufende Summen zu haben, wenn die angegebene Anzahl von Datensätzen ohne Berechnungen für kleinere Anzahl von Datensätzen erreicht ist. Berechnungsart Es stehen viele Berechnungsarten zur Verfügung. Geben Sie für jedes von Ihnen ausgewählte Aktualisierungsfeld die gewünschte ein. Laufende Summen Ergebnisse Die laufenden Summen Ergebnisse werden in den Update-Feldern platziert angegeben: Beispiel in den rechten vier Felder dieser Microsoft Access-Tabelle In diesem Beispiel platziert Totals Rennen, wurde nach Datum sortiert die Daten und Bestell-ID, mit der Berechnung auf den Vertrieb Feld. Beachten Sie die Werte in der Laufendefeld von 1 bis 10 steigende Sobald es 10 erreicht, wird es bei 10 bleibt, weil das die maximale Anzahl der Datensätze in der Bewegungs insgesamt ist. Das RunningTotal-Feld zeigt die Summe der Verkäufe über die Datensätze in dem sich bewegenden Satz von Datensätzen an. Da die Option, die Werte für den anfänglichen Satz von Datensätzen zu berechnen, wurde ausgewählt (bevor es 10 Datensätze erreicht), werden die Werte angezeigt. Andernfalls würden die ersten 9 Datensätze Nullwerte aufweisen. Interaktive Assistenten und VBA programmatischen Schnittstellen Total Access Statistik können Sie interaktiv Ihre Berechnungen durch die Assistenten-Schnittstelle erzeugen, um bequem die Datenquelle wählen, Felder und Analyse ohne Programmierung. Nachdem Sie Ihre Auswahl angeben, werden sie als Szenario in Ihrer Datenbank automatisch gespeichert, so dass Sie sie wieder in die Zukunft, wenn die Datenänderungen ausgeführt werden können. Eine VBA-Statistik-Funktion ist auch verfügbar, so dass Sie diese Ergebnisse aus Code generieren können. Sie können ganz einfach alle gespeicherten Szenario ausführen, indem ein einheitliches Verfahren in der Total Access Statistik VBA-Bibliothek aufrufen. Die Bibliothek enthält eine lizenzfreie Runtime-Lizenz, so dass Sie sie mit Ihrer Access-Datenbank einbinden und an Nicht-Total-Zugriffsstatistikeigentümer verteilen können. Rufen Sie die Funktion aus einem Tasten OnClick-Ereignis oder einem anderen Prozess, und die Ergebnisse werden für Sie generiert. Sie können sogar die eingebaute Benutzeroberfläche zu verstecken, damit Ihre Benutzer nicht einmal wissen, Total Access Statistics ausgeführt wird. Theyll staunen mit statistischen Analysefunktionen Weitere Details der Berechnungen Erhältlich in Total Access Statistiken Hier sind einige zusätzliche Ressourcen und Informationen über einige der Datenanalyse auf dem Microsoft Access-Daten mit Total Access Statistiken durchführen können: Finanz-Cash-Flow-Berechnungen verwenden Discounted-Cash Flüsse und Zinsen abhängig Zahlungen und Einnahmen Net Present Value (NPV), Present Value (PV), Future Value (FV), Internal Rate of Return (IRR), Modified Internal Rate of Return (MIRR) für periodische und Datum zu erzeugen. Perzentil Berechnungen Berechnen verschiedene Arten von Perzentile: Median, Quartile, Quintile Octiles, Dezil, Perzentile, alle X.5 Perzentil und sie in eine Tabelle einfügen oder ein vorhandenes Feld aktualisieren mit den Aufzeichnungen Wert Perzentil. Laufende Summen und Moving Averages Summarize eine Gruppe von Datensätzen bewegen laufenden Summen zu berechnen, gleitende Mittelwerte, Minimum, Maximum, Reichweite, Median, Standardabweichung etc. Datennormalisierung (Data Transponieren) Transponieren nicht normalisierten Daten, so dass Sie leicht zu analysieren und zu pflegen es. Regressionen Einfache, mehrfache und polynomische Regressionen mit Berechnungen von Gleichungskoeffizienten, ANOVA und Resttabelle Kreuztabellen und Chi-Square Erweiterte Quertabellen mit Prozentsatz der Zeilen, Spalten und Summen als Datensätze oder Spalten angezeigtMoving-Durchschnitt in T-SQL Eine gemeinsame Berechnung in der Trendanalyse Ist der sich bewegende (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 Lind


No comments:

Post a Comment