Maison > base de données > tutoriel mysql > Comment calculer la différence de valeur entre des lignes consécutives dans une table de base de données à l'aide de SQL ?

Comment calculer la différence de valeur entre des lignes consécutives dans une table de base de données à l'aide de SQL ?

Patricia Arquette
Libérer: 2025-01-10 15:22:43
original
879 Les gens l'ont consulté

How to Calculate the Value Difference Between Consecutive Rows in a Database Table Using SQL?

Calcul de la différence entre des lignes consécutives dans une table de base de données à l'aide de SQL

Disons que vous avez une table de base de données avec un entier non séquentiel comme identifiant de ligne (rowInt) et une valeur numérique (Value). Le défi est de calculer efficacement la différence entre les Value de lignes consécutives à l'aide de SQL.

Une simple requête comme celle-ci récupérera les données :

SELECT * FROM myTable ORDER BY rowInt;
Copier après la connexion

Cependant, nous devons calculer et afficher la différence. Le format de sortie souhaité est :

<code>rowInt   Value   Diff
2        23      22    --45-23
3        45     -35    --10-45
9        10     -45    --0-45
17       0       0     --0 (or NULL, depending on desired behavior)</code>
Copier après la connexion

Voici comment y parvenir en utilisant une auto-jointure avec une sous-requête :

SELECT
    c.rowInt,
    c.Value,
    ISNULL(n.Value, 0) - c.Value AS Diff
FROM
    myTable AS c
LEFT JOIN
    myTable AS n ON n.rowInt = (SELECT MIN(rowInt) FROM myTable WHERE rowInt > c.rowInt)
ORDER BY c.rowInt;
Copier après la connexion

Cette requête effectue un LEFT JOIN de la table (myTable) sur elle-même, alias c (actuel) et n (suivant). La sous-requête dans la clause ON trouve le minimum rowInt supérieur à celui de la ligne actuelle rowInt, identifiant ainsi la ligne suivante. ISNULL(n.Value, 0) gère le cas où il n'y a pas de ligne suivante (pour la dernière ligne), en remplaçant 0 par le n.Value manquant. La différence est ensuite calculée et alias Diff. La clause finale ORDER BY garantit que les résultats sont présentés dans le bon ordre. Alternativement, vous pouvez utiliser COALESCE au lieu de ISNULL. Le choix dépend de votre système de base de données spécifique.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal