Thursday 12 January 2017

Db2 Gleitender Durchschnitt

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. Erzeuge die angeforderte Ausgabe: Antwort # 2 am: Januar 9, 2010, um 0:33 Uhr Ihre Antwort 2016 Stack Exchange, IncDB2 10: Führen Sie Oracle-Anwendungen auf DB2 10 für Linux, UNIX und Windows-Motivation Entwickeln Sie Fähigkeiten zu diesem Thema Dieser Inhalt ist Teil eines fortschreitenden Wissenspfads für Ihre Fähigkeiten voranzutreiben. Siehe DB2-Grundlagen für Oracle-Profis: Migration von Oracle auf DB2 Im März 2009 habe ich auf einer Cebit-Präsentation, die ich auf DB2 hielt, einen 110V-Computerlautsprecher ausgebrannt, den ich gedankenlos an das 230V-Stromnetz ohne Transformator angeschlossen hatte. Auf derselben Reise habe ich auch das Ladegerät für meine elektrische Zahnbürste und meinen Bartschneider bei ähnlichen Vorfällen zerstört. Angesichts meiner Unfähigkeit, aus Fehlern zu lernen, ist es keine Überraschung, dass einer meiner Lieblings-Sprüche (Herkunft unbekannt) ist dies: Das Problem mit Standards ist, dass es so viele von ihnen. In der Welt der relationalen Datenbankmanagementsysteme (RDBMS) sind wir mit mindestens drei Hauptstandards und unzähligen Variationen zu diesen gesegnet: ANSI SQL und ANSI SQL PSM Oracle SQL und PL SQL Sybase und Microsoft174 TSQL Abbildung 1 illustriert mit einem Venn-Diagramm wie Überschneiden sich die SQL-Dialekte. Abbildung 1. Babylonische Verwirrung von SQL Wenn Sie eine Anwendung schreiben, müssen Sie die Wahl treffen, von welchem ​​RDBMS-Anbieter zu verwenden ist. Sobald Sie diese Wahl getroffen haben, sind Sie im Wesentlichen verpflichtet. Jeder Versuch, Anbieter zu wechseln, um die Vorteile niedrigerer Preise, besserer Technologie oder einer besseren Partnerschaft zu nutzen, wird durch den Legacy-Code vereitelt, der ein umfangreiches Rewrite erfordert, bevor es mit einem anderen RDBMS verwendet werden kann. Darüber hinaus kann Ihr Skill-Set nicht von einem Produkt auf ein anderes so einfach übertragen werden, wie Sie es erwarten würden. IBM174 DB2174 10 für Linux174, UNIX174 und Windows174 (DB2) verringert drastisch die Barrieren für Anwendungen, die für Oracle geschrieben wurden, wenn sie sie auf DB2 aktivieren. Dies bietet Kunden und Herstellern die Möglichkeit, ein DBMS basierend auf seinen Vorteilen und nicht in der Anwendungshistorie auszuwählen. DB2 10 enthält Oracle-Kompatibilitätsfunktionen Um zu ermöglichen, dass eine Anwendung, die für ein RDBMS geschrieben wird, auf einem anderen praktisch unverändert läuft, müssen viele Stücke an ihre Stelle treten. Verschiedene Verriegelungsmechanismen, Datentypen, SQL, prozedurale Sprache auf dem Server und sogar die Client-Schnittstellen, die von der Anwendung selbst verwendet werden, müssen nicht nur in der Syntax, sondern auch in der Semantik ausgerichtet werden. Alle diese Schritte wurden in DB2 durchgeführt. Änderungen sind die Ausnahme, nicht die Regel (Sie können die Anwendungsänderungen schnell einschätzen). Tabelle 1 bietet einen schnellen Überblick über häufig verwendete Funktionen. Tabelle 1. Häufig verwendete Funktionen Es stellt sich heraus, dass es keinen semantischen Grund gibt, warum eine Transaktion, die unter CS-Isolation läuft, auf das Ergebnis wartet, wenn eine geänderte Zeile gefunden wird. Ein ebenso zufrieden stellendes Verhalten ist, die aktuell begangene Version der geänderten Zeile zu lesen. Dieses Verhalten wurde seit DB2 9.7 implementiert. Was passiert, ist, dass DB2 einfach die aktuell begangene Version einer gesperrten Zeile aus dem Protokoll abruft. In den meisten Fällen ist die Zeile immer noch im Protokollpuffer, da die Änderung noch nicht erfolgt ist. Aber auch wenn die Zeile ausgeschrieben wurde und auch im Protokollpuffer überschrieben wurde, weiß DB2 genau, wo sie zu finden ist, damit ein einziger IO die gewünschte Version in den Pufferpool bringt. Wie in Abbildung 2 dargestellt, stellen Sie sich vor, dass ein Benutzer einen Namen in einer Mitarbeiter-Tabelle aktualisiert. Bevor dieser Benutzer die Änderung begangen hat, scannt ein anderer Benutzer diese Tabelle. Traditionell hätte der zweite Benutzer auf den ersten Benutzer warten müssen, um zu begehen oder zurückzusetzen. Durch das Lesen der aktuell festgelegten Daten wird der Scan für den zweiten Benutzer einfach die Version der Zeile aus dem Protokollpuffer abrufen, die nicht die ersten Benutzeränderungen enthält. Abbildung 2. Verfasser dont block Leser Es ist wichtig zu beachten, dass dieses Verhalten: führt keine neuen Objekte wie ein Rollback-Segment. Hat keinen Leistungsaufwand für den Verfasser, da das Protokoll ohnehin geschrieben werden muss. Kann nicht dazu führen, dass eine Situation wie ein Snapshot zu alt ist, denn im extrem unwahrscheinlichen Fall, dass die Protokolldatei archiviert wurde (während eine Transaktion noch offen war), wird DB2 einfach zurückfallen und warten, bis die Sperre weggeht. Zusätzlich zu diesen Änderungen wurden zusätzliche Sperrvermeidungsverfahren in DB2 eingeführt, um einen Leser zu beseitigen, der eine Sperre unter CS-Isolierung hält. Tabelle 4 zeigt das neue Parallelitätsverhalten, das DB2 mit CS hat. Tabelle 4. Neues DB2-Gleichzeitigkeitsverhalten mit CS Wie Sie sehen können, ist das Gleichzeitigkeitsverhalten jetzt identisch mit dem von Oracle. Tatsächlich weist jede DB2-Datenbank, die seit DB2 9.7 erstellt wurde, dieses Verhalten standardmäßig auf. Neue Datentypen Das Herz jeder Datenbank sind ihre Daten. Nicht übereinstimmende Typen oder nicht übereinstimmende Semantiken dieser Typen können die Fähigkeit, eine Anwendung auf andere RDBMS zu aktivieren, erheblich beeinträchtigen. Damit Oracle-Anwendungen auf DB2 ausgeführt werden können, ist es entscheidend, seine nicht standardmäßigen Basistypen wie Strings, Daten und Ziffern zu unterstützen. Über die Angleichung dieser Basistypen hinaus gibt es weitere komplexere Typen, die in Oracles PL SQL üblicherweise verwendet werden und seit DB2 9.7 verfügbar sind. Tabelle 5. Neue DB2-Datentypen Unterstützung für NUMBER und NUMBER (p, s) Wurde basierend auf DECFLOAT (mit Power Hardware Beschleunigung) und DECIMAL hinzugefügt. Das Verhalten des VARCHAR2-Typs enthält leere Zeichenfolgen, die als NULL interpretiert werden. NCHAR, NVARCHAR2 und NCLOB Die National Character-Typen bieten Double-Byte-String-Unterstützung für Unicode-Datenbanken. Eine Datenbank im Oracle DATE-Modus enthält neben dem Kalenderdatum auch die TIME-Komponente. Die Skalierung der Sekundenbruchteile kann zwischen 0 (Datumszeit) bis zu 12 (pico Sekunden) gewählt werden. Dieser Typ kann in Prozedurlogik, Variablen und Parametern zu Routinen verwendet werden. Die ARRAY-Unterstützung in Prozeduren wurde erweitert, um VARRAY-Methoden und Syntax zu unterstützen. Zusätzlich zu regulären Arrays unterstützt DB2 auch assoziative Arrays. Dieser zusammengesetzte Typ kann in Variablen und Parametern und als Element für Arrays und assoziative Arrays verwendet werden. Ref Cursortyp Cursors können Variablen zugewiesen oder mit Parametern übergeben werden. Implizite Casting und Typ Auflösung Wenn es wie eine Ente geht, und es spricht wie eine Ente, dann muss es eine Ente sein. Dies ist das Mantra von vielen der neuen Sprachen wie PHP und Ruby. Jedes Literal ist ein String und wird dann als anderer Typ verwendet, der auf Kontext basiert. Im Einklang mit dem SQL-Standard und nach einer Philosophie, dass eine Typenkonflikt wahrscheinlich ein Hinweis auf einen Codierungsfehler ist, hat DB2 traditionell starken Schreibregeln gefolgt, wobei Strings und Ziffern nicht verglichen werden können, wenn man nicht explizit in den anderen gegossen wird. Leider, wenn eine Oracle-Anwendung schwach Typisierung in ihrem SQL-SQL-Anwendung verwendet, hätte diese Anwendung zuvor fehlgeschlagen, um DB2 zu kompilieren. Seit DB2 9.7 ist das implizite Casting (oder schwache Typisierung) die Standardeinstellung. Das heißt, Strings und Zahlen können auf sehr flexible Weise verglichen, zugeordnet und betrieben werden. Darüber hinaus können nicht typisierte NULLs in vielen anderen Orten verwendet werden, während untypisierte Parameter-Marker fast überall verwendet werden können, dank deferred Vorbereitung. Das heißt, DB2 wird den Typ eines Parameter-Markers nicht auflösen, bis er den ersten tatsächlichen Wert gesehen hat. Um das implizite Casting abzurunden, unterstützt DB2 auch das Deaktivieren von Routineparametern sowie die Zuordnung von Argumenten zu Parametern mit Namen. Erweiterte eingebaute Funktionsbibliothek im DB2 Alle RDBMs stellen Bibliotheken mit Funktionen zur Verfügung, um mit den Daten zu arbeiten. Das Problem ist, dass keine zwei die gleichen Namen für diese Funktionen verwenden, auch wenn am Ende die Funktionalität sehr ähnlich ist. Zusätzlich zu seinen eigenen traditionellen Funktionen unterstützt DB2 nun eine mit Oracle kompatible Bibliothek. Die folgende Liste bietet einen schnellen Überblick, ist aber keine erschöpfende Liste: Konvertierungs - und Gussfunktionen TODATE TOCHAR TOCLOB TONUMBER TOSINGLEBYTE TOTIMESTAMP Jede dieser Funktionen unterstützt eine Reihe von kompatiblen Formatierungszeichenfolgen. Die stark gestiegene Überlappung in den unterstützten Funktionen zwischen den beiden Produkten führt zu einem deutlich verbesserten Out-of-the-Box-Erfolg, der eine Oracle-Anwendung auf DB2 ermöglicht. Oracle SQL-Dialekt-Unterstützung Dieser Artikel hat bisher Parallelität, Datentypen, Typisierung und Funktionen abgedeckt. Aber die Unterschiede zwischen Oracle und DB2 gehen tiefer als diese. Der Stoff der SQL-Dialekte, deren Schlüsselwörter und Semantik unterscheiden sich in einigen Bereichen. Auch jedes Produkt unterstützt einige Features, die die anderen einfach nicht. Wenn diese Features beliebt sind, beschränken sie die Fähigkeit, gemeinsame SQL gegen beide Produkte einzureichen, die viele kleine und große Sprach-Tweaks veranlassen können. Tabelle 6 enthält einige Highlights. Tabelle 6. Neue SQL-Unterstützung


No comments:

Post a Comment