Calculer efficacement les différences de valeurs de ligne dans les tables SQL
Ce guide présente deux méthodes pour calculer la différence entre les valeurs de lignes consécutives dans une table SQL, en se concentrant sur une structure de table non séquentielle. La première méthode convient à toutes les versions de SQL, tandis que la seconde utilise des fonctions de fenêtre pour améliorer les performances dans SQL Server 2012 et versions ultérieures.
Méthode 1 : auto-jointure (toutes les versions SQL)
Cette approche utilise un LEFT JOIN
pour comparer chaque ligne avec la ligne suivante en fonction d'un identifiant de ligne (rowInt
dans cet exemple).
<code class="language-sql">SELECT current.rowInt, current.Value, ISNULL(next.Value, 0) - current.Value AS ValueDifference FROM sourceTable AS current LEFT JOIN sourceTable AS next ON next.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > current.rowInt)</code>
La fonction ISNULL
gère les cas où une ligne n'a pas de successeur (la dernière ligne), en attribuant une différence de 0 pour éviter les valeurs NULL
.
Méthode 2 : fonction de fenêtre LEAD() (SQL Server 2012 et versions ultérieures)
Pour une efficacité accrue dans les versions plus récentes de SQL Server, la fonction de fenêtre LEAD()
fournit une solution plus simple :
<code class="language-sql">SELECT RowInt, Value, LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value AS ValueDifference FROM sourceTable</code>
LEAD(Value, 1, 0)
récupère la valeur de la ligne suivante (décalage 1), par défaut à 0 si aucune ligne suivante n'existe. Cela calcule directement la différence, éliminant ainsi le besoin d’une auto-jointure. Cette méthode est généralement plus rapide et plus lisible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!