Passer au contenu principal
eLearner.app
Module 13 · Leçon 4 sur 452/57 dans le cours~12 min
Leçons du module (4/4)

Décalages : LAG et LEAD

Changements : LAG et LEAD

Dans les données séquentielles et temporelles, vous devez souvent comparer la ligne actuelle avec celle de la veille. En SQL "standard", cela nécessite des auto-jointures très dangereuses (et très lentes).

Les fonctions LAG() (ligne précédente) et LEAD() (ligne suivante) résolvent exactement ce problème avec une agilité et une élégance extrêmes.

Regard vers le passé et l'avenir

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

Dans l'exemple, chaque ligne contiendra commodément le montant produit par la même table, décalé d'une ligne vers l'avant (en arrière dans le temps). Nous pouvons facilement soustraire total_amount - LAG(...) pour calculer la différence ou les variations en pourcentage d’un mois à l’autre !

De même, LEAD() extraira la valeur de la ligne juste en dessous de la ligne actuelle.

Exercice#sql.m13.l4.e1
Tentatives : 0Chargement…

De la table 'products', extrayez 'id', 'launch_on', 'price' et ajoutez 'prev_price', c'est à dire le 'prix' du produit considéré logiquement comme le 'précédent', par ordre croissant 'launch_on'.

Chargement de l'éditeur…
Afficher l'indice

Utiliser LAG(price) OVER(ORDER BY launch_on ASC)

Solution disponible après 3 tentatives

Exercice#sql.m13.l4.e2
Tentatives : 0Chargement…

Comment calculeriez-vous les sauts de note par utilisateur individuel ? Simulez-le : à partir du tableau "avis", extrayez "customer_id", "created_at", "rating" et "next_rating" (le prochain avis du même client au fil du temps). Alors partitionnez par 'customer_id', triez par 'created_at' et utilisez la fonction de fenêtre de droite pour jeter un coup d'œil.

Chargement de l'éditeur…
Afficher l'indice

LEAD() avec PARTITION BY et ORDER BY dans OVER.

Solution disponible après 3 tentatives