Retard SQL

Retard Sql



La fonction SQL lag() vous permet d'accéder à la ligne précédente à partir de la ligne actuelle avec un décalage spécifique. Bref, la fonction lag() permet d'accéder à la ligne précédente depuis la ligne actuelle. En spécifiant la valeur de décalage, vous pouvez accéder aux lignes 1, 2, 3, etc. précédentes à partir de la ligne actuelle.

C'est l'opposé de la fonction lead() qui permet d'accéder aux lignes suivantes.







Décalage SQL()

La syntaxe de la fonction est la suivante :



LAG(expression_valeur, décalage [, par défaut])
SUR (
[PARTITION PAR expression_partition]
ORDER BY expression_tri [ASC | DESC]
);

Voici les arguments pris en charge :



  • expression_valeur – Il spécifie la valeur de retour de la ligne précédente. L'expression doit être évaluée à une valeur unique.
  • compenser – Il spécifie le nombre de lignes en arrière de la ligne actuelle auxquelles accéder.
  • défaut – Il définit la valeur par défaut si le décalage est en dehors de la portée de la partition. Par défaut, la valeur est définie sur NULL.
  • Partitionner par – Il précise comment partitionner les données.
  • Commandé par – Il définit le format d'ordre des lignes de chaque partition.

Exemple de configuration de données

Avant de plonger dans le fonctionnement de la fonction lag(), commençons par configurer une table de base à des fins de démonstration.





Produits CRÉER UNE TABLE (
product_id INT CLÉ PRIMAIRE AUTO_INCREMENT,
nom_produit VARCHAR(255),
catégorie VARCHAR(255),
prix DÉCIMAL(10, 2),
quantité INT,
date_d'expiration DATE,
code-barres BIGINT
);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs (« Toque de chef 25 cm »,
'boulangerie',
24.67,
57,
'2023-09-09',
2854509564204);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs (« Œufs de caille - en conserve »,
'garde-manger',
17.99,
67,
'2023-09-29',
1708039594250);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs ('Café - Lait de poule Capuccino',
'boulangerie',
92.53,
dix,
'2023-09-22',
8704051853058);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs ('Poire - Barbarie',
'boulangerie',
65.29,
48,
'2023-08-23',
5174927442238);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs ('Pâtes - Cheveux d'Ange',
'garde-manger',
48.38,
59,
'2023-08-05',
8008123704782);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs (« Vin - Prosecco Valdobiaddene »,
'produire',
44.18,
3,
'2023-03-13',
6470981735653);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs ('Pâtisserie - Mini Assortiment Français',
'garde-manger',
36.73,
52,
'2023-05-29',
5963886298051);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs ('Orange - En conserve, Mandarine',
'produire',
65,0,
1,
'2023-04-20',
6131761721332);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs (« Porc - Épaule »,
'produire',
55.55,
73,
'2023-05-01',
9343592107125);

insérer
dans
produits (nom_produit,
catégorie,
prix,
quantité,
date d'expiration,
code à barre)
valeurs (« Dc Hikiage Hira Huba »,
'produire',
56.29,
53,
'2023-04-14',
3354910667072);

Une fois la création et la configuration des données terminées, passons à quelques exemples.

Exemple 1 : utilisation de base

Dans ce cas, nous avons accès à un tableau « produits » qui contient les informations sur le produit. Supposons que nous souhaitions obtenir le code-barres précédent de la ligne actuelle.



Nous pouvons utiliser la fonction lag() comme suit :

sélectionner
nom_produit,
prix,
décalage (code-barres) terminé (partition par catégorie
commandé par
prix asc) comme article_précédent
depuis
produits p;

Le code donné partitionne les données en fonction de la catégorie. Il récupère ensuite le code-barres précédent dans la partition à l'aide de la fonction lag().

Le résultat résultant est le suivant :

Exemple 2 : définition de la valeur par défaut

S'il n'y a pas de ligne précédente dans une colonne spécifique (hors limite), la fonction définit la valeur sur NULL comme indiqué dans l'exemple précédent.

Pour définir une valeur par défaut pour tout accès hors de portée, nous pouvons procéder comme suit :

sélectionner
nom_produit,
prix,
lag(code-barres, 1, 'N/A') over (partition par catégorie
commandé par
prix asc) comme article_précédent
depuis
produits p;

Nous définissons la valeur par défaut sur « N/A ». Cela devrait remplacer toute valeur hors limite, comme indiqué dans le résultat :

Exemple 3 : valeur de décalage personnalisée

Supposons que vous souhaitiez accéder aux deux lignes précédentes à partir de la ligne actuelle. Nous pouvons le faire en définissant la valeur de décalage sur 2.

Un exemple de requête est illustré ci-dessous :

sélectionner
nom_produit,
prix,
lag(code-barres, 2, 'N/A') over (partition par catégorie
commandé par
prix asc) comme article_précédent
depuis
produits p;

Sortir:

Cette requête renvoie les deux lignes précédentes de chaque partition.

Conclusion

Dans ce didacticiel, nous avons appris à utiliser la fonction lag() pour obtenir l'élément précédent de la ligne actuelle.