PaliSkill
SQL — Fonctions de fenêtrage

Leçon 3 / 9 — Chapitre 5: FIRST_VALUE, LAST_VALUE, NTH_VALUE et fenêtres nommées

LAST_VALUE() et le piège du cadre par défaut

LAST_VALUE() semble symétrique à FIRST_VALUE(), mais cache un piège classique : avec le cadre par défaut (RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), la borne de fin du cadre est la ligne courante — pas la dernière ligne de la partition ! LAST_VALUE() renvoie donc, à tort, la valeur de la ligne courante elle-même.

SELECT joueur, manche, score,
  LAST_VALUE(score) OVER (PARTITION BY joueur ORDER BY manche) AS dernier_score_piege
FROM scores_manche;

Pour Boris : manche 1 → 8 (sa propre valeur, pas 9, le vrai dernier score) ; manche 2 → 12 (toujours sa propre valeur) ; manche 3 → 9 (là, ça coïncide, puisque c'est justement la dernière ligne). Sur les manches 1 et 2, le résultat est incorrect si l'intention était d'obtenir le score final de Boris (9) : LAST_VALUE, avec ce cadre par défaut, ne renvoie que la valeur de la ligne courante.

À retenir :

  • Avec le cadre par défaut, LAST_VALUE() renvoie systématiquement la valeur de la ligne courante, pas la dernière ligne de la partition — un piège fréquent, car son nom suggère l'inverse.
  • Seule la toute dernière ligne d'une partition échappe à ce piège par coïncidence : ligne courante et dernière ligne y sont, par définition, la même chose.

À vous de jouer : avec cette requête piégée, quelle est la valeur de dernier_score_piege pour la manche 2 de Boris ? Est-ce le vrai dernier score de Boris (9) ?

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 72 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès