Partie 4 · Navigation
LAG, LEAD, FIRST_VALUE, LAST_VALUE
Les fonctions de navigation permettent de se déplacer à l'intérieur d'une partition ordonnée : LAG lit une valeur passée, LEAD une valeur future, FIRST_VALUE la première valeur de la fenêtre, LAST_VALUE la dernière.
Elles ne calculent pas d'agrégats : elles extraient des valeurs repérées dans un contexte. Il est utile de distinguer les fonctions qui lisent une valeur de celles qui résument plusieurs valeurs.
| Fonction | Ce qu'elle lit |
|---|---|
LAG(close) | le prix précédent |
LEAD(close) | le prix suivant |
FIRST_VALUE(close) | la 1re valeur de la fenêtre |
LAST_VALUE(close) | la dernière valeur de la fenêtre |
LEAD : regarder vers le futur
LEAD(close) OVER (PARTITION BY ticker ORDER BY date)
Cette fonction renvoie le prix suivant. Elle sert à construire un rendement futur, à mesurer l'évolution de t à t+1 ou à définir une cible supervisée en machine learning. Attention : utiliser LEAD sans s'en rendre compte dans un signal censé être disponible à la date t est une fuite d'information. Sur le dernier jour d'un actif, LEAD vaut NULL : il n'y a pas de ligne suivante dans la partition.
À toi de coder
Vérifie que tu as compris
LEAD(close) OVER (PARTITION BY ticker ORDER BY date) renvoie…FIRST_VALUE et LAST_VALUE
FIRST_VALUE(close) OVER (
PARTITION BY ticker ORDER BY date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)
Pour chaque ligne, on rappelle le premier prix observé dans l'historique jusqu'à la date courante : on peut ainsi exprimer une performance relative par rapport à un point initial.
Avec la même fenêtre, LAST_VALUE(close) renvoie simplement la valeur courante. Piège : LAST_VALUE est souvent mal compris. Sans fenêtre explicite adaptée (par exemple jusqu'à UNBOUNDED FOLLOWING), on ne récupère pas « la dernière valeur globale ». (Hors cours : dans la norme SQL, avec un ORDER BY et sans cadre, la fenêtre par défaut s'arrête à la ligne courante.)
À toi de coder
À toi de coder
Vérifie que tu as compris
LAST_VALUE(close) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) renvoie…