SQL LAG() Funktion verstehen
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Key Takeaways
- Die SQL-Funktion
LAG()
ruft Daten aus vorherigen Zeilen innerhalb desselben Resultsets ab. - Sie vereinfacht die Trendanalyse und den Vergleich, ohne komplexe Joins zu erfordern.
- Die korrekte Verwendung von
ORDER BY
undPARTITION BY
ist für genaue Ergebnisse unerlässlich.
Die SQL-Funktion LAG()
ist eine leistungsstarke Fensterfunktion, mit der Sie auf Daten aus einer vorherigen Zeile im selben Resultset zugreifen können, ohne komplexe Self-Joins zu benötigen. Sie ist besonders nützlich, um Werte über Zeilen hinweg zu vergleichen, z. B. um Differenzen zu berechnen oder Trends im Zeitverlauf zu erkennen.
Syntax
LAG (scalar_expression [, offset [, default_value]]) OVER ( [PARTITION BY partition_expression] ORDER BY order_expression)
- scalar_expression: Die Spalte oder der Ausdruck, aus der bzw. dem der Wert abgerufen werden soll.
- offset: Optional. Die Anzahl der Zeilen zurück von der aktuellen Zeile. Standardmäßig 1.
- default_value: Optional. Der Wert, der zurückgegeben werden soll, wenn der Offset den Gültigkeitsbereich der Partition überschreitet. Standardmäßig NULL.
- PARTITION BY: Optional. Teilt das Resultset in Partitionen auf, auf die die Funktion angewendet wird.
- ORDER BY: Gibt die Reihenfolge der Zeilen in jeder Partition an. Dies ist obligatorisch.
Grundlegendes Beispiel
Betrachten Sie eine Tabelle sales_data
mit den Spalten date
und sales
. Um die Umsätze jedes Tages mit den Umsätzen des Vortages zu vergleichen:
SELECT date, sales, LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales FROM sales_data;
Diese Abfrage fügt eine Spalte previous_day_sales
hinzu, die die Umsätze des Vortages anzeigt. Wenn es kein vorheriges Datum gibt (z. B. die erste Zeile), wird 0 zurückgegeben, wie durch default_value
angegeben.
Verwenden von PARTITION BY
Wenn Sie die Funktion LAG()
innerhalb von Gruppen ausführen möchten, z. B. um den Umsatz des Vormonats für jede Abteilung zu berechnen:
SELECT department, month, revenue, LAG(revenue, 1, 0) OVER (PARTITION BY department ORDER BY month) AS previous_month_revenue FROM department_revenue;
Hier arbeitet die Funktion LAG()
innerhalb jeder department
und liefert den Umsatz des Vormonats zum Vergleich.
Praktische Anwendungsfälle
- Trendanalyse: Vergleichen Sie aktuelle und vorherige Werte, um Trends zu erkennen.
- Berechnen von Differenzen: Bestimmen Sie die Veränderung zwischen aufeinanderfolgenden Zeilen.
- Datenvalidierung: Identifizieren Sie Anomalien oder fehlende Daten, indem Sie sie mit vorherigen Einträgen vergleichen.
Überlegungen
- Sortierung: Die
ORDER BY
-Klausel ist entscheidend, da sie die Reihenfolge der Zeilen definiert. Ohne sie ergibt das Konzept von "vorhergehend" keinen Sinn. - Standardwerte: Geben Sie einen
default_value
an, um Fälle zu behandeln, in denen der Offset über die verfügbaren Daten hinausgeht. Dies verhindert NULL-Werte in Ihrem Resultset. - Performance: Obwohl
LAG()
effizient ist, kann die Verwendung auf großen Datensätzen mit komplexen Partitionen die Performance beeinträchtigen. Stellen Sie eine ordnungsgemäße Indizierung und Abfrageoptimierung sicher.
Schlussfolgerung
Die SQL-Funktion LAG()
ist ein wichtiges Werkzeug für die Datenanalyse, das Vergleiche zwischen Zeilen ohne komplexe Joins ermöglicht. Indem Sie ihre Syntax und Anwendungen verstehen, können Sie erweiterte Analysen direkt in Ihren SQL-Abfragen durchführen.
FAQs
Sie ermöglicht den Vergleich von aktuellen Zeilenwerten mit vorherigen Zeilen zur Analyse.
Ja, indem PARTITION BY
verwendet wird, um Daten für separate Analysen zu segmentieren.
Die Funktion gibt einen Standardwert oder NULL zurück, wenn nicht angegeben.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Backend-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- zahlen Sie nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 $ unterstützen 6,94 Mio. Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Auto-Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein Betriebsaufwand – konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ