Fonction de décalage SQL Server

Fonction de décalage SQL Server

La fonction LAG dans SQL Server est une fonction Windows introduite dans SQL Server 2012. Cette fonction vous permet de récupérer les données des lignes précédentes selon la valeur de décalage spécifiée. Considérez la fonction de décalage comme la possibilité d'accéder aux données des lignes précédentes à partir de la ligne actuelle.

Par exemple, à partir de la ligne actuelle, vous pouvez accéder à la ligne précédente, qui devient la ligne actuelle, et vous pouvez accéder à la ligne précédente, et ainsi de suite.

Dans cet article, nous apprendrons à utiliser la fonction LAG dans SQL Server en utilisant divers exemples.

Fonction SQL Server LAG ()

Nous exprimons la syntaxe de la fonction comme:

LAG (Expression, Offset [, par défaut])
SUR (
[partition par partition_by_expression]
ORDER_BY_CLAUSE
)

Paramètres de fonction et valeur de retour

Dans la syntaxe ci-dessus, nous avons les paramètres suivants:

  1. Expression - une colonne ou une expression utilisée par la fonction de décalage pour effectuer les calculs. Il s'agit d'un paramètre requis, et l'expression doit renvoyer une seule valeur.
  2. Compenser - Une valeur entière positive qui définit le nombre de lignes en arrière la fonction de décalage. S'il n'est pas spécifié, la valeur par défaut est définie sur 1.
  3. Défaut - Spécifie la valeur par défaut renvoyée par la fonction si la valeur de décalage spécifiée va au-delà de la portée de la partition. Par défaut, la fonction renvoie null.
  4. Partition_by_expression - une expression utilisée pour créer des partitions de données logiques. SQL Server appliquera la fonction de décalage aux ensembles de partition résultants.
  5. ORDER_BY_CLAUSE - Une expression pour définir comment les lignes dans les partitions résultantes sont commandées.

La fonction renvoie le type de données de l'expression scalaire.

Exemples de décalage SQL Server

Examinons un exemple pratique pour mieux comprendre comment utiliser la fonction de décalage. Commençons par ajouter des exemples de données comme indiqué:

Créer la base de données SampledB;
ALLER
Utilisez SampledB;
Créer la table LAG_FUNC (
id int not null identité (1,1) clé primaire,
dbname varchar (50),
Paradigm Varchar (50),
));
Insérer dans LAG_FUNC (dbname, paradigm)
Valeurs («mysql», «relationnel»),
(«MongoDB», «document»),
(«Memcached», «magasin de valeurs clés»),
(«Etcd», «magasin de valeurs clés»),
('Apache Cassandra', 'large colonne'),
('Couchdb', 'Document'),
(«PostgreSQL», «relationnel»),
(«SQL Server», «relationnel»),
('neo4j', 'graph'),
(«Elasticsearch», «Texte complet»);
SELECT * FROM LAG_FUNC;

L'ensemble de requête ci-dessus doit renvoyer les données comme:

Exécutez la fonction LAG sur la colonne DBName comme indiqué dans l'exemple de requête ci-dessous:

SELECT *, LAG (DBNAME, 1) Over (Ordre by dbname) comme précédemment_db à partir de lag_func;

La requête ci-dessus renvoie une sortie comme suit:

Remarquez, la première ligne contient une valeur nulle, car elle n'a pas de valeur antérieure.

Exemple 2:

Au lieu d'obtenir une valeur nulle où la ligne ne contient pas de ligne précédente, nous pouvons définir une valeur par défaut, comme indiqué dans l'exemple de requête ci-dessous:

Sélectionnez Dbname, LAG (DBNAME, 1, «N / A»)
Over (Order by dbname) comme précédent_db
De LAG_FUNC;

La requête ci-dessus renvoie une sortie similaire à celle ci-dessus. Cependant, au lieu de Null, nous obtenons la chaîne spécifiée.

Exemple 3: valeur de décalage personnalisée

Nous pouvons également récupérer les valeurs sur une valeur de décalage personnalisée. Par exemple, pour obtenir la valeur de trois lignes précédentes, nous pouvons utiliser la requête:

Sélectionnez Dbname, LAG (DBNAME, 3, «N / A»)
Over (Order by dbname) comme précédent_db
De LAG_FUNC;

L'exemple de code ci-dessus doit renvoyer le résultat comme:

Ici, les 3 premières colonnes sont nuls car les valeurs de décalage vont au-delà de la portée des lignes disponibles.

Exemple 4: partition par

Nous pouvons créer des partitions logiques des données connexes à l'aide de la clause Partition by. Nous pouvons alors appliquer la fonction de décalage à chaque partition.

Considérez l'exemple ci-dessous:

Sélectionnez dbname, paradigm, lag (dbname, 1, 'n / a')
Over (partition by Paradigm Order by dbname) comme précédent_db
De LAG_FUNC;

La requête ci-dessus renvoie un exemple de requête en tant que:

La requête crée 6 partitions basées sur le paradigme dans le résultat ci-dessus. Sur chaque partition, la fonction de décalage récupère la ligne précédente.

Conclusion

Cet article vous a appris à utiliser la fonction SQL Server Lag pour récupérer la ligne précédente à partir d'un ensemble résultant.

Merci pour la lecture!