Direkt zum Hauptinhalt springen
eLearner.app
Modul 13 · Lektion 4 von 452/57 im Kurs~12 min
Lektionen des Moduls (4/4)

Verschiebungen: LAG und LEAD

Schichten: LAG und LEAD

Bei sequentiellen und zeitbasierten Daten müssen Sie häufig die aktuelle Zeile mit der vom Vortag vergleichen. In „Standard“-SQL erfordert dies sehr gefährliche (und sehr langsame) Selbstverknüpfungen.

Die Funktionen LAG() (vorherige Zeile) und LEAD() (nächste Zeile) lösen genau dieses Problem mit äußerster Agilität und Eleganz.

Blick in die Vergangenheit und in die Zukunft

SQL
SELECT
  created_at,
  total_amount,
  LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;

Im Beispiel trägt jede Zeile praktischerweise die von derselben Tabelle produzierte Menge, um eine Zeile nach vorne (zeitlich rückwärts) verschoben. Wir können total_amount - LAG(...) einfach subtrahieren, um die Differenz oder die prozentualen Änderungen von Monat zu Monat zu berechnen!

Ebenso ruft LEAD() den Wert aus der Zeile direkt unter dem aktuellen ab.

Übung#sql.m13.l4.e1
Versuche: 0Wird geladen…

Extrahieren Sie aus der Tabelle „products“ „id“, „launched_on“, „price“ und fügen Sie „prev_price“ hinzu, d. h. den „Preis“ des Produkts, das logischerweise als das „vorherige“ betrachtet wird, in aufsteigender Reihenfolge „launched_on“.

Editor wird geladen…
Hinweis anzeigen

Verwenden Sie LAG(price) OVER(ORDER BY launch_on ASC)

Lösung nach 3 Versuchen verfügbar

Übung#sql.m13.l4.e2
Versuche: 0Wird geladen…

Wie würden Sie die Bewertungssprünge pro einzelnem Benutzer berechnen? Simulieren Sie es: Extrahieren Sie aus der Tabelle „Bewertungen“ „customer_id“, „created_at“, „rating“ und „next_rating“ (die nächste Bewertung desselben Kunden im Laufe der Zeit). Partitionieren Sie also nach „customer_id“, sortieren Sie nach „created_at“ und verwenden Sie die rechte Fensterfunktion, um einen Blick nach vorne zu werfen.

Editor wird geladen…
Hinweis anzeigen

LEAD() zusammen mit PARTITION BY und ORDER BY im OVER.

Lösung nach 3 Versuchen verfügbar