
Calcul des différences de valeurs de lignes consécutives dans SQL
Les requêtes de base de données impliquent souvent plus qu'une simple récupération de données. Déterminer la différence entre les valeurs de lignes consécutives présente un défi courant. Cet article détaille les méthodes efficaces pour calculer ces différences en SQL, en se concentrant sur les scénarios dans lesquels l'ordre des lignes n'est pas strictement séquentiel.
Exemple de scénario :
Imaginez un tableau avec des valeurs entières, pas nécessairement classées séquentiellement par un identifiant de ligne :
<code>rowInt | Value --------+------ 2 | 23 3 | 45 17 | 10 9 | 0</code>
L'objectif est de calculer la différence entre chaque Value et le Value de la ligne immédiatement suivante, ce qui donne :
<code>rowInt | Value | Diff --------+--------+------ 2 | 23 | 22 3 | 45 | -35 9 | 0 | -45 17 | 10 | 10</code>
Approche SQL Server 2005 (fonctions pré-fenêtre) :
Avant l'introduction des fonctions de fenêtre, SQL Server 2005 s'appuyait sur une méthode moins efficace combinant sous-requêtes et fonctions d'agrégation :
<code class="language-sql">SELECT
[current].rowInt,
[current].Value,
ISNULL([next].Value, 0) - [current].Value AS Diff
FROM
sourceTable AS [current]
LEFT JOIN
(
SELECT MIN(rowInt) AS rowInt, Value FROM sourceTable
WHERE rowInt > [current].rowInt
GROUP BY Value
) AS [next]
ON [next].rowInt = [current].rowInt</code>Explication :
ISNULL() gère les cas où aucune ligne suivante n'existe, la valeur par défaut étant 0.rowInt et le Value de la ligne suivante.Value de la ligne actuelle du Value de la ligne suivante.Considérations relatives aux performances :
Cette ancienne technique peut s'avérer inefficace pour les grands ensembles de données en raison des multiples analyses de tables impliquées. Le SQL moderne offre des solutions plus optimisées.
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!
police de définition du bloc-notes
Code écran bleu 0x000009c
À quel point le Dimensity 6020 est-il équivalent à Snapdragon ?
pycharm ouvre une nouvelle méthode de fichier
Comment télécharger des vidéos de Douyin
Comment lire les fichiers py en python
Comment ouvrir le fichier apk
Utilisation de l'instruction delete