Beispielanalyse des Prinzips und der Lösung des MySQL-Gleitreihenfolgeproblems

Beispielanalyse des Prinzips und der Lösung des MySQL-Gleitreihenfolgeproblems

Dieser Artikel erläutert anhand von Beispielen das Prinzip und die Lösung des MySQL-Gleitreihenfolgeproblems. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

Erstellen Sie zunächst die Tabelle MonthlyOrders und importieren Sie einige Daten gemäß dem folgenden Code

CREATE TABLE MonatlicheBestellungen(
Bestellmonat DATUM,
Bestellnummer INT UNSIGNED,
PRIMÄRSCHLÜSSEL (Bestellmonat)
);

INSERT INTO MonthlyOrders SELECT '2010-02-01',23;
INSERT INTO MonthlyOrders SELECT '2010-03-01',26;
INSERT INTO MonthlyOrders SELECT '2010-04-01',24;
INSERT INTO MonthlyOrders SELECT '2010-05-01',27;
INSERT INTO MonthlyOrders SELECT '2010-06-01',26;
INSERT INTO MonthlyOrders SELECT '2010-07-01',32;
INSERT INTO MonthlyOrders SELECT '2010-08-01',34;
INSERT INTO MonthlyOrders SELECT '2010-09-01',30;
INSERT INTO MonthlyOrders SELECT '2010-10-01',31;
INSERT INTO MonthlyOrders SELECT '2010-11-01',32;
INSERT INTO MonthlyOrders SELECT '2010-12-01',33;
INSERT INTO MonthlyOrders SELECT '2011-01-01',31;
INSERT INTO MonthlyOrders SELECT '2011-02-01',34;
INSERT INTO MonthlyOrders SELECT '2011-03-01',34;
INSERT INTO MonthlyOrders SELECT '2011-04-01',38;
INSERT INTO MonthlyOrders SELECT '2011-05-01',39;
INSERT INTO MonthlyOrders SELECT '2011-06-01',35;
INSERT INTO MonthlyOrders SELECT '2011-07-01',49;
INSERT INTO MonthlyOrders SELECT '2011-08-01',56;
INSERT INTO MonthlyOrders SELECT '2011-09-01',55;
INSERT INTO MonthlyOrders SELECT '2011-10-01',74;
INSERT INTO MonthlyOrders SELECT '2011-11-01',75;
INSERT INTO MonthlyOrders SELECT '2011-12-01',14;

Beim Problem der gleitenden Reihenfolge geht es darum, für jeden Monat die Anzahl der gleitenden Bestellungen im Vorjahr (Quartal oder Monat) zurückzugeben, d. h. für jeden Monat N die Gesamtzahl der Bestellungen von N-11 bis zum Monat N. Dabei wird vorausgesetzt, dass es in der Abfolge der Monate keine Lücken gibt.

Führen Sie die folgende SQL-Abfrage aus, um die Gesamtzahl der gleitenden Bestellungen für das Vorjahr für jeden Monat zurückzugeben

WÄHLEN
  DATE_FORMAT(a.Bestellmonat, '%Y%m') AS Vonmonat,
  DATE_FORMAT(b.Bestellmonat, '%Y%m') AS heuteMonat,
  SUM(c.ordernum) AS Bestellungen
Von monatlichen Bestellungen ein
INNER JOIN Monatsbestellungen b
  ON DATE_ADD(a.Bestellmonat, INTERVALL 11 MONAT) = b.Bestellmonat
INNER JOIN Monatsbestellungen c
  ON c.ordermonth ZWISCHEN a.ordermonth UND b.ordermonth
GRUPPE NACH a.Bestellmonat,b.Bestellmonat;

Die Laufergebnisse sind wie folgt

Die Abfrage führt zunächst einen Self-Join für die Tabelle „MonthlyOrders“ durch. Tabelle A wird als Untergrenze (Von-Monat) und Tabelle B als Obergrenze (Bis-Monat) verwendet. Die Anschlussvoraussetzungen sind:

DATE_ADD(a.Bestellmonat, INTERVALL 11 MONAT) = b.Bestellmonat

Beispielsweise entspricht Februar 2010 in Tabelle A dem Januar 2011.

Nach Abschluss der Selbstverbindung müssen Sie die Bestellungen zählen. Zu diesem Zeitpunkt müssen Sie einen weiteren Self-Join durchführen, um die Anzahl der Bestellungen für jeden Monat innerhalb des Bereichs zu erhalten. Voraussetzung für die Verbindung ist also

c.ordermonth ZWISCHEN a.ordermonth UND b.ordermonth

Basierend auf der oben genannten Methode können wir auch die Auftragslage in jedem Quartal berechnen und als Grundlage für den Vergleich mit dem Wachstum gegenüber dem Vorjahr verwenden.

WÄHLEN
  DATE_FORMAT(a.Bestellmonat, '%Y%m') AS Vonmonat,
  DATE_FORMAT(b.Bestellmonat, '%Y%m') AS heuteMonat,
  SUM(c.ordernum) AS Bestellungen
Von monatlichen Bestellungen ein
INNER JOIN Monatsbestellungen b
  ON DATE_ADD(a.Bestellmonat, INTERVALL 2 MONAT) = b.Bestellmonat
  UND MONAT(a.Bestellmonat) % 3 = 1
INNER JOIN Monatsbestellungen c
  ON c.ordermonth ZWISCHEN a.ordermonth UND b.ordermonth
GRUPPE NACH a.Bestellmonat,b.Bestellmonat;

Die Laufergebnisse sind wie folgt

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „MySQL-Protokolloperationskenntnisse“, „Zusammenfassung der MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“ und „Zusammenfassung der MySQL-Datenbanksperrenkenntnisse“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • Nutzungs- und Leistungsoptimierungstechniken für die Aggregatfunktion „count“ in MySQL
  • Detaillierte Erläuterung der häufig verwendeten MySQL-Aggregatfunktionen
  • So fügen Sie bedingte Ausdrücke zu Aggregatfunktionen in MySql hinzu
  • php+mysql Open Source XNA-Aggregationsprogramm zum Download freigegeben
  • Mysql kann keine nicht aggregierten Spalten auswählen
  • Analyse der Verwendung von MySQL-Abfragesortierung und Abfrageaggregationsfunktionen
  • Detaillierte Erläuterung von Beispielen für MySQL-Einzeltabellenabfragevorgänge [Syntax, Einschränkungen, Gruppierung, Aggregation, Filterung, Sortierung usw.]
  • Analyse des Prinzips und der Verwendung der kontinuierlichen MySQL-Aggregation
  • Analyse gängiger Anwendungsbeispiele von MySQL-Prozessfunktionen
  • Analyse des kumulativen Aggregationsprinzips von MySQL und Anwendungsbeispiele

<<:  CentOS8 - bash: verstümmelte Zeichen und Lösungen

>>:  jQuery implementiert das Ausblenden und Anzeigen von HTML-Elementen

Artikel empfehlen

Drei Möglichkeiten zum Löschen einer Tabelle in MySQL (Zusammenfassung)

Drop-Tabelle Drop löscht Tabelleninformationen di...

Detaillierte Erklärung redundanter und doppelter Indizes in MySQL

MySQL ermöglicht das Erstellen mehrerer Indizes f...

Einführung in die allgemeine API-Verwendung von Vue3

Inhaltsverzeichnis Veränderungen im Lebenszyklus ...

Mehrere Möglichkeiten zum Berechnen des Alters anhand des Geburtstags in MySQL

Ich habe MySQL vorher nicht sehr oft verwendet un...

Zwei Möglichkeiten zum Erstellen von Docker-Images

Inhaltsverzeichnis Aktualisieren Sie das Bild von...

So begrenzen Sie die Anzahl der Datensätze in einer Tabelle in MySQL

Inhaltsverzeichnis 1. Lösung auslösen 2. Partitio...

7 interessante Möglichkeiten, versteckte Elemente in CSS zu erreichen

Vorwort Die Ähnlichkeiten und Unterschiede zwisch...

Ändern Sie den Stil des HTML-Textkörpers in JS

Inhaltsverzeichnis 1. Ursprüngliche Definition 2....

Detaillierte Erklärung, warum MySQL nicht mit UNION zwei Abfragen verbinden kann

Überblick UNION Mit dem Schlüsselwort „Verbindung...

JavaScript zum Erzielen digitaler Uhreffekte

In diesem Artikelbeispiel wird der spezifische Co...

Vue implementiert ein einfaches Einkaufswagenbeispiel

In diesem Artikelbeispiel wird der spezifische Co...

Tutorial zur MySQL-Installation in der Linux-CentOS7-Umgebung

Detaillierte Einführung in die Schritte zur Insta...