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
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.
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'.
Afficher l'indice
Utiliser LAG(price) OVER(ORDER BY launch_on ASC)
Solution disponible après 3 tentatives
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.
Afficher l'indice
LEAD() avec PARTITION BY et ORDER BY dans OVER.
Solution disponible après 3 tentatives