LAG |
Dernière ligne |
|---|---|
| Oracle Database SQL | Oracle 8i Release 2 (version 8.1.5) ou supérieure |
Syntaxe
| LAG { ( value_expr [, offset [, default]]) [ { RESPECT | IGNORE } NULLS ] | ( value_expr [ { RESPECT | IGNORE } NULLS ] [, offset [, default]] ) } OVER ([ query_partition_clause ] order_by_clause) |
Paramètres
| Nom | Description |
|---|---|
| value_expr | Ce paramètre permet de spécifier la colonne ou l'expression dont on souhaite obtenir la valeur d'une ligne précédente. |
| offset | Ce paramètre permet d'indiquer de combien de lignes en arrière on souhaite accéder (par défaut, 1). |
| default | Ce paramètre permet de définir la valeur à retourner si la ligne précédente n'existe pas (par défaut NULL). |
| RESPECT NULLS | Ce paramètre permet de considérer les valeurs NULL dans le décalage (offset) lors du calcul. |
| IGNORE NULLS | Ce paramètre permet d'ignorer les valeurs NULL dans le décalage, en sautant les lignes où value_expr est NULL. |
| OVER | Ce paramètre permet de définir la fenêtre d'analyse avec une partition et un ordre, spécifiant sur quel ensemble de lignes appliquer la fonction. |
| query_partition_clause | Ce paramètre permet de partitionner les données, c'est-à-dire de diviser les résultats en groupes sur lesquels la fonction LAG est appliquée indépendamment. |
| order_by_clause | Ce paramètre permet d'ordonner les lignes dans chaque partition pour définir la séquence sur laquelle la fonction LAG va opérer. |
Description
Cette fonction permet d'accéder à une valeur d'une ligne précédente dans un ensemble de résultats, sans utiliser de jointure. Elle est très utile pour comparer une ligne avec celle qui la précède.
Remarques
- Fonction analytique puissante : La fonction LAG fait partie des fonctions analytiques introduites dans Oracle 8i Release 2. Elle permet de référencer une valeur située dans une ligne précédente sans avoir à effectuer une jointure auto-référencée, ce qui simplifie considérablement certaines requêtes analytiques et améliore leurs performances.
- Accès à une ligne décalée : LAG retourne la valeur d'une colonne à une position décalée en arrière par rapport à la ligne courante. Ce décalage est contrôlé par le paramètre offset, ce qui permet une grande flexibilité pour comparer une ligne avec n'importe quelle ligne précédente dans l'ordre défini.
- Valeur par défaut pour lignes manquantes : Lorsqu'il n'existe pas de ligne correspondant au décalage demandé (par exemple pour la première ligne), LAG retourne NULL par défaut. Cependant, il est possible de spécifier une valeur personnalisée grâce au paramètre default, évitant ainsi la gestion de valeurs nulles dans le code SQL.
- Gestion fine des valeurs NULL : Les options RESPECT NULLS et IGNORE NULLS offrent un contrôle précis sur le traitement des valeurs NULL dans la colonne analysée. RESPECT NULLS inclut les lignes avec NULL dans le calcul du décalage, alors que IGNORE NULLS les saute, ce qui peut être utile selon le contexte métier.
- Nécessité d'une clause OVER complète : La fonction LAG nécessite toujours une clause OVER pour définir la fenêtre d'analyse, avec une partition facultative (query_partition_clause) et un ordre obligatoire (order_by_clause). Cette clause détermine précisément le contexte dans lequel la fonction va opérer.
- Partitionnement pour analyses segmentées : La clause de partitionnement permet de découper les données en groupes indépendants, sur lesquels la fonction LAG est appliquée séparément. Par exemple, on peut partitionner par client pour analyser les achats précédents au sein de chaque client, évitant ainsi des résultats globaux non pertinents.
- Tri indispensable pour cohérence : L'ordre défini dans la clause order_by est crucial, car il détermine la séquence des lignes. Sans un ordre cohérent, la notion de «ligne précédente» perd tout sens, et les résultats obtenus peuvent être erratiques ou non reproductibles.
- Utilité dans les analyses temporelles : LAG est fréquemment utilisée pour comparer des valeurs d'une période à une autre dans les séries temporelles, comme le chiffre d'affaires d'un mois par rapport au mois précédent, facilitant ainsi le calcul de variations ou de tendances sans recourir à des jointures complexes.
- Simplicité syntaxique : La syntaxe de LAG est concise et expressive, ce qui la rend accessible même pour des requêtes complexes. Cela permet aux développeurs SQL de réduire la complexité du code tout en augmentant la lisibilité des requêtes analytiques.
- Optimisation des performances : En évitant les jointures auto-référencées classiques, LAG peut souvent améliorer les performances des requêtes analytiques, surtout sur de grandes tables. Oracle optimise les fonctions analytiques pour un traitement rapide des données partitionnées et ordonnées.
- Compatibilité ascendante : Étant disponible depuis Oracle 8i Release 2, LAG est compatible avec un large éventail de versions Oracle en production, ce qui en fait un outil fiable pour des systèmes existants et leur évolution.
- Cas d'usage diversifiés : Outre les comparaisons temporelles, LAG est utilisée dans des domaines comme le traitement des données financières, la détection de changements d'état, l'analyse comportementale, ou encore la génération de rapports où le contexte précédent est important pour chaque ligne de résultat.
Dernière mise à jour : Dimanche, le 29 Juin 2025