SQL-Verzögerung

Sql Verzogerung



Mit der SQL-Funktion lag() können Sie von der aktuellen Zeile aus mit einem bestimmten Offset auf die vorherige Zeile zugreifen. Kurz gesagt: Mit der Funktion lag() können Sie von der aktuellen Zeile aus auf die vorherige Zeile zugreifen. Durch Angabe des Offset-Werts können Sie von der aktuellen auf die vorherigen 1, 2, 3 usw. Zeilen zugreifen.

Es ist das Gegenteil der Funktion „lead()“, die Ihnen den Zugriff auf nachfolgende Zeilen ermöglicht.







SQL-Verzögerung()

Die Funktionssyntax lautet wie folgt:



LAG(value_expression, offset [, default])
ÜBER (
[PARTITION VON partition_expression]
ORDER BY sort_expression [ASC | BESCHREIBUNG]
);

Die folgenden Argumente werden unterstützt:



  • Wert_Ausdruck – Es gibt den Rückgabewert der vorhergehenden Zeile an. Der Ausdruck muss einen einzelnen Wert ergeben.
  • versetzt – Gibt an, auf wie viele Zeilen rückwärts von der aktuellen Zeile zugegriffen werden soll.
  • Standard – Es legt den Standardwert fest, wenn der Offset außerhalb des Bereichs der Partition liegt. Standardmäßig ist der Wert auf NULL gesetzt.
  • Partitionieren nach – Es gibt an, wie die Daten partitioniert werden.
  • Sortieren nach – Es legt das Reihenfolgeformat für die Zeilen in jeder Partition fest.

Beispieldaten-Setup

Bevor wir uns mit der Funktionsweise der Funktion lag() befassen, beginnen wir mit der Einrichtung einer einfachen Tabelle zu Demonstrationszwecken.





CREATE TABLE-Produkte (
produkt_id INT PRIMÄRSCHLÜSSEL AUTO_INCREMENT,
Produktname VARCHAR(255),
Kategorie VARCHAR(255),
Preis DECIMAL(10, 2),
Menge INT,
expiration_date DATUM,
Barcode BIGINT
);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte („Kochmütze 25 cm“,
'Bäckerei',
24,67,
57,
'09.09.2023',
2854509564204);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte („Wachteleier – Konserviert“,
'Speisekammer',
17,99,
67,
'29.09.2023',
1708039594250);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte („Kaffee – Eierlikör Capuccino“,
'Bäckerei',
92,53,
10,
'22.09.2023',
8704051853058);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte („Birne – Stachelig“,
'Bäckerei',
65,29,
48,
'23.08.2023',
5174927442238);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte („Pasta – Engelshaar“,
'Speisekammer',
48,38,
59,
'2023-08-05',
8008123704782);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte („Wein – Prosecco Valdobiaddene“,
'produzieren',
44,18,
3,
'2023-03-13',
6470981735653);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte („Gebäck – Französisches Mini-Sortiment“,
'Speisekammer',
36,73,
52,
'29.05.2023',
5963886298051);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte („Orange – Konserviert, Mandarine“,
'produzieren',
65,0,
1,
„20.04.2023“,
6131761721332);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte ('Schweinefleisch - Schulter',
'produzieren',
55,55,
73,
'01.05.2023',
9343592107125);

einfügen
hinein
Produkte (Produktname,
Kategorie,
Preis,
Menge,
Verfallsdatum,
Barcode)
Werte ('Dc Hikiage Hira Huba',
'produzieren',
56,29,
53,
'2023-04-14',
3354910667072);

Nachdem die Datenerstellung und Einrichtung abgeschlossen ist, können wir mit der Diskussion einiger Beispiele fortfahren.

Beispiel 1: Grundlegende Verwendung

In diesem Fall haben wir Zugriff auf eine „Produkte“-Tabelle, die die Produktinformationen enthält. Angenommen, wir möchten den vorherigen Barcode aus der aktuellen Zeile abrufen.



Wir können die Funktion lag() wie folgt verwenden:

wählen
Produktname,
Preis,
lag(barcode) over (partition nach Kategorie
Sortieren nach
Preis aufsteigend) wie previous_item
aus
Produkte p;

Der angegebene Code partitioniert die Daten basierend auf der Kategorie. Anschließend wird mithilfe der Funktion lag() der vorherige Barcode in der Partition abgerufen.

Die resultierende Ausgabe lautet wie folgt:

Beispiel 2: Festlegen des Standardwerts

Wenn in einer bestimmten Spalte keine vorherige Zeile vorhanden ist (außerhalb der Grenze), setzt die Funktion den Wert auf NULL, wie im vorherigen Beispiel gezeigt.

Um einen Standardwert für jeden Zugriff außerhalb des Gültigkeitsbereichs festzulegen, können wir Folgendes tun:

wählen
Produktname,
Preis,
lag(barcode, 1, 'N/A') over (partition nach Kategorie
Sortieren nach
Preis aufsteigend) wie previous_item
aus
Produkte p;

Wir setzen den Standardwert auf „N/A“. Dies sollte alle außerhalb des zulässigen Bereichs liegenden Werte ersetzen, wie in der Ausgabe gezeigt:

Beispiel 3: Benutzerdefinierter Offsetwert

Angenommen, Sie möchten von der aktuellen Zeile aus auf die beiden vorherigen Zeilen zugreifen. Das können wir erreichen, indem wir den Offset-Wert auf 2 setzen.

Eine Beispielabfrage ist im Folgenden dargestellt:

wählen
Produktname,
Preis,
lag(barcode, 2, 'N/A') over (partition nach Kategorie
Sortieren nach
Preis aufsteigend) wie previous_item
aus
Produkte p;

Ausgabe:

Diese Abfrage gibt die beiden vorherigen Zeilen in jeder Partition zurück.

Abschluss

In diesem Tutorial haben wir gelernt, wie man mit der Funktion lag() arbeitet, um das vorherige Element aus der aktuellen Zeile abzurufen.