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
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.
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“.
Hinweis anzeigen
Verwenden Sie LAG(price) OVER(ORDER BY launch_on ASC)
Lösung nach 3 Versuchen verfügbar
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.
Hinweis anzeigen
LEAD() zusammen mit PARTITION BY und ORDER BY im OVER.
Lösung nach 3 Versuchen verfügbar