Lag et lead avec des fenêtres de lignes
Combinez LAG/LEAD avec des fenêtres de lignes pour calculer les écarts entre périodes et détecter les intervalles manquants dans les séries temporelles.
Lag et lead avec des fenêtres de lignes est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Récapitulatif de LAG/LEAD
LAG(col, n) renvoie la valeur située n lignes avant la ligne actuelle dans la fenêtre. LEAD(col, n) regarde vers l'avant.
SELECT day, revenue,
LAG(revenue) OVER (ORDER BY day) AS prev_day_revenue
FROM daily_revenue;LAG avec une valeur par défaut
Le troisième argument est une valeur par défaut lorsqu'il n'existe aucun voisin :
LAG(revenue, 1, 0) OVER (ORDER BY day)
-- Returns 0 instead of NULL for the very first row.Calculer les écarts
Évolution d'un jour à l'autre :
SELECT day, revenue,
revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;LAG en plusieurs étapes
Comparer avec la valeur d'il y a N jours — utile pour les comparaisons semaine après semaine ou année après année :
LAG(revenue, 7) OVER (ORDER BY day) -- 7 days ago
LAG(revenue, 365) OVER (ORDER BY day) -- 1 year agoLEAD pour les créneaux à prévoir
Modèles du type « Quel est le prochain événement ? » :
SELECT id, ts,
LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) AS next_ts,
LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) - ts AS gap_to_next
FROM events;Modèles par utilisateur
LAG/LEAD respectent PARTITION BY :
SELECT user_id, ts, action,
LAG(action) OVER (PARTITION BY user_id ORDER BY ts) AS prev_action
FROM events;
-- prev_action is the user's previous event, not globally.Détecter les changements d'état
Combiner LAG avec CASE :
SELECT id, status,
CASE WHEN status <> LAG(status) OVER (ORDER BY ts) THEN 'changed' ELSE 'same' END
FROM orders;FIRST_VALUE / LAST_VALUE
La première ou la dernière valeur dans le cadre :
FIRST_VALUE(status) OVER (PARTITION BY order_id ORDER BY ts) AS first_status
-- The status when the order was first seen.
LAST_VALUE(status) OVER (
PARTITION BY order_id ORDER BY ts
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS final_statusNTH_VALUE
La Nième valeur d'une fenêtre ordonnée :
NTH_VALUE(revenue, 3) OVER (
ORDER BY revenue DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)
-- Third-highest revenue value.Fonctions de cadre par groupe
Combiner LAG avec PARTITION BY pour obtenir les voisins de chaque groupe :
SELECT user_id, ts, page,
LAG(page) OVER (PARTITION BY user_id ORDER BY ts) AS prev_page,
LEAD(page) OVER (PARTITION BY user_id ORDER BY ts) AS next_page
FROM page_views;Performances
Les fonctions de fenêtre effectuent un seul tri par partition. Indexez les colonnes (PARTITION BY, ORDER BY) lorsque les partitions sont volumineuses.
Récapitulatif
LAG/LEAD rendent les comparaisons ligne par ligne peu coûteuses.
- La valeur par défaut évite NULL
- Combiner avec CASE pour détecter les changements d'état
- FIRST_VALUE/LAST_VALUE/NTH_VALUE complètent la famille
Vérification rapide
Vous voulez que chaque ligne inclue l'intervalle (en secondes) jusqu'au prochain événement de l'utilisateur. Quelle fonction utiliser ?
Questions Fréquemment Posées
La leçon « Lag et lead avec des fenêtres de lignes » est-elle gratuite ?
Oui — le texte complet de « Lag et lead avec des fenêtres de lignes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Lag et lead avec des fenêtres de lignes » ?
Combinez LAG/LEAD avec des fenêtres de lignes pour calculer les écarts entre périodes et détecter les intervalles manquants dans les séries temporelles. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Lag et lead avec des fenêtres de lignes » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Clauses de fenêtre : ROWS ou RANGE
- Lag et lead avec des fenêtres de lignes
- Regroupement avec NTILE et Cume_Dist
- Modèles de rapports du monde réel