Verwenden Sie die Verzögerungsfunktion in MySQL

Verwenden Sie die Verzögerungsfunktion in MySQL
Mysql Version 8.0 führte die MySQL -Fensterfunktionen ein und ermöglicht es Ihnen, Abfragen in einer einfacheren und organisierten Methode auszuführen. Dadurch erhöhen Sie die Verarbeitung und Leistung. Zu diesen Funktionen gehören: rank (), row_rank (), last_value () und vieles mehr.

In diesem Tutorial konzentrieren wir uns auf die Verwendung einer der MySQL -Funktionen: lag (). Es handelt sich um eine Fensterfunktion, mit der Sie den Wert früherer Zeilen aus der aktuellen Zeile innerhalb desselben Ergebnissatzes zugreifen und abrufen können.

Grundlegende Syntax

Die allgemeine Syntax für die Verwendung von MySQL LAG () -Funktion lautet:

Verzögerung (Ausdruck, OffsetValue, defaultvar) über (
Partition durch [Ausdruck]
Ordnung durch Ausdruck [ASC | Desc]
);

Nehmen wir uns einen Moment Zeit, um einige der Parameter in der Funktionssyntax von LAG () zu erklären.

Sie sind wie folgt:

Ausdruck: Dies ist der Wert, der von der Funktion aus der Zeile zurückgegeben wird, die die aktuelle Zeile durch den angegebenen Offset -Wert leitet.

OffsetValue: Dieser Wert repräsentiert die Anzahl der Zeilen, die vor der aktuellen Zeile vorgehen, um den Wert zu erhalten. Dieser Wert muss 0 oder ein Wert höher als 0 sein.

NOTIZ: Der Wert von 0 repräsentiert die aktuelle Zeile.

Standardvar: Dieser Wert wird von der Funktion als Standardwert zurückgegeben, wenn keine vorhergehende Zeile vorliegt. Wenn der Standardwert im Funktionsparameter nicht definiert ist und keine vorhergehende Zeile vorhanden ist, gibt die Funktion einen Nullwert zurück.

Partition von: Die Partition nach Klausel teilt die Zeilen in einem logischen Partitionssatz auf. Die Verzögerungsfunktion wird dann auf die geteilten Partitionen angewendet.

SORTIEREN NACH: Dieser Wert gibt wie üblich die Reihenfolge der Zeilen in den verfügbaren Partitionen an.

Beispiel Anwendungsfälle

Sehen wir uns beispielhaften Anwendungsfällen der LAG () -Funktion an, um zu verstehen, wie sie funktioniert. Erstellen Sie zunächst eine Beispieldatenbank namens Sample_DB

Datenbank fallen, wenn existiert sample_database;
Datenbank erstellen sample_database;
Verwenden Sie sample_database;
Droptabelle, wenn Benutzer existiert;
Erstellen Sie Tabellenbenutzer
(
ID int Primärschlüssel Auto_increment,
Nennen Sie Varchar (255),
Punktzahl int,
Registrierung Datum einschreiben
);
In Benutzer einfügen (ID, Name, Punktzahl, Registration_Date)
Werte (1, "Alexandra", 99, '2021-01-10'),
(2, "Jacob", 81, 2021-05-20 '),
(3, "Leonard", 67, '2020-01-02')),
(4, "Peter", 88, '2021-03-03')),
(5, "Amy", 100, 2021-05-05 ');
Wählen Sie * von Benutzern aus;

Jetzt, da wir eine Beispieldatenbank haben, können wir fortfahren und veranschaulichen, wie man mit der MySQL -Lag -Funktion arbeitet.

Beispiel 1: LAG -Funktion ohne Standardwert
Betrachten Sie das nachstehende Beispiel, das die LAG.

Select *, LAG (einschreiben_date, 1) over (Order by id asc) als vorheriger_date von sample_database.Benutzer;

Sobald wir die obige Abfrage ausgeführt haben, erhalten wir eine neue Spalte Poth_date, die den vorherigen Wert der Zeile wie angegeben mit einem Offset -Wert von 1 enthält. Da es in der ersten Zeile keinen vorherigen Wert gibt, ist der Wert null.

Hinweis: Sie können den Standardwert angeben, wenn eine Zeile keinen vorherigen Wert hat.

Die Ausgabe ist wie unten gezeigt:

Beispiel 2: LAG -Funktion mit Standardwert
Sie können auch einen Standardwert für eine Zeile angeben, in der der vorherige Wert nicht vorhanden ist. In unserem Beispiel setzen wir den Standardwert im aktuellen Datum fest.

Hinweis: In diesem Beispiel setzen wir den Offset -Wert auch als 2 anstelle von 1 fest.

Betrachten Sie die folgende Abfrage:

Wählen Sie *, lag (einschreiben Sie_Date, 2, Curdate ()) over (Order by id asc) als vorheriges_date aus sample_database.Benutzer;

Sobald wir die obige Abfrage ausgeführt haben, erhalten wir Werte mit einem Offset -Wert von zwei und dem aktuellen Datum als Standard für Nullwerte.

Die Ausgabe ist wie unten gezeigt:

Beispiel 3: Verzögerungsfunktion mit Partition von
Wir können die LAG () -Funktion mit der Partition nach Klausel verwenden. Diese Klausel gruppiert die Daten zuerst in verschiedene logische Untergruppen und wendet dann die LAG -Funktion auf die Partitionen an.

Lassen Sie uns die Daten in der Tabelle des Benutzers sehen. Betrachten Sie die folgende Frage:

In Benutzer einfügen (ID, Name, Punktzahl, Registration_Date)
Werte (1, "Alexandra", 99, '2021-01-10'),
(2, "Jacob", 81, 2021-05-20 '),
(3, "Leonard", 67, '2020-01-02')),
(4, "Peter", 88, '2021-03-03')),
(5, "Amy", 100, 2021-05-05 ')),
(6, "Tobias", 100, 2020-06-06 '),
(7, "Kurtzman", 67, '2020-07-10'),
(8, "Immortal", 50, 2021-03-01 ')),
(9, "Anthony", 81, 2021-01-01 '),
(10, "James", 77, '2021-02-03');

Nachdem wir eine Tabelle mit 10 Werten haben, können wir die Daten nach der Punktzahl verteilt und dann die LAG -Funktion anwenden.

Die obige Operation ist in der folgenden Abfrage dargestellt:

Wählen Sie *, LAG (einschreiben_date, 1, curdate ()) over (Partition nach Bewertungsreihenfolge nach ID ASC) als vorheriger_date aus sample_database.Benutzer;

In der obigen Abfrage beginnen wir zunächst die Daten basierend auf der Punktzahl und wenden dann die LAG -Funktion mit einem Offset -Wert von 1 an. Wir haben auch den Standardwert als aktuelles Datum festgelegt. Das Ausgangsergebnis ist wie unten gezeigt:

Hinweis: Sie können auch beachten, dass die erste Zeile jeder Partition das aktuelle Datum enthält, was bedeutet, dass in der festgelegten Zeile kein vorheriger Wert vorhanden ist.

Abschluss

In diesem Tutorial wird besprochen, wie die Funktion LAG () funktioniert, um Werte der vorherigen Zeilen in der aktuellen Zeile zu erhalten.

Zusammenfassung:

  • Die MySQL -Funktion ist eine Fensterfunktion, die den Wert aus der vorherigen Zeile basierend auf dem angegebenen Offset -Wert erhält. Das heißt, wenn der Offset -Wert 1 beträgt, erhält er den Wert direkt darüber.
  • Standardmäßig verwendet die Funktion LAG () einen Offset -Wert von 1, sofern nicht ausdrücklich angegeben ist.
  • Wenn die Daten außerhalb des Bereichs sind (kein vorheriger Wert im angegebenen Offset), wird der Wert auf null gesetzt.
  • Die LAG () -Funktion akzeptiert auch die Partition nach Klausel, die Daten in verschiedenen logischen Partitionen basierend auf der angegebenen Spalte oder des angegebenen Zustands einräumt.

Vielen Dank für das Lesen.