Calcul des différences entre les lignes séquentielles dans SQL Server 2005
Ce guide montre comment calculer la différence entre les valeurs de lignes consécutives dans une table SQL Server 2005. La solution utilise une auto-jointure pour réaliser efficacement ce calcul.
Voici la requête SQL :
<code class="language-sql">SELECT c.rowInt, c.Value, ISNULL(n.Value, 0) - c.Value AS Diff FROM sourceTable AS c LEFT JOIN sourceTable AS n ON n.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > c.rowInt)</code>
Cette requête effectue une jointure gauche du sourceTable
(alias c
pour "actuel") avec lui-même (alias n
pour "suivant"). La condition de jointure n.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > c.rowInt)
trouve la ligne suivante en fonction de la colonne rowInt
, garantissant le bon ordre. ISNULL(n.Value, 0)
gère les cas où il n'y a pas de ligne suivante, évitant ainsi les erreurs. La différence est calculée comme n.Value - c.Value
et alias Diff
.
Exemple :
Considérez cet exemple sourceTable
:
rowInt | Value |
---|---|
2 | 23 |
3 | 45 |
9 | 0 |
17 | 10 |
Le résultat de la requête serait :
rowInt | Value | Diff |
---|---|---|
2 | 23 | 22 |
3 | 45 | -45 |
9 | 0 | 10 |
17 | 10 | 0 |
La colonne Diff
montre la différence entre le Value
de la ligne actuelle et le Value
de la ligne suivante. Notez que la différence de la dernière ligne est de 0 car il n'y a pas de ligne suivante.
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!