Soustraction d'une ligne de données d'une autre dans SQL
J'ai été perplexe avec certains SQL où j'ai plusieurs lignes de données, et je veux en supprimer une ligne de la rangée précédente et de l'avoir répéter tout le chemin vers le bas.
Voici donc le tableau:
CREATE TABLE foo ( id, longueur )
INSERT INTO foo (id,longueur) VALUES(1,1090) INSERT INTO foo (id,longueur) VALUES(2,888) INSERT INTO foo (id,longueur) VALEURS(sur 3545) INSERT INTO foo (id,longueur) VALUES(4,434) INSERT INTO foo (id,longueur) VALUES(5,45)
Je veux les résultats pour afficher une troisième colonne appelée différence qui est une ligne à soustraire de celui-ci avec la dernière rangée de la soustraction à partir de zéro.
+------+------------------------+ | id |longueur | différence | +------+------------------------+ | 1 | 1090 | 202 | | 2 | 888 | 343 | | 3 | 545 | 111 | | 4 | 434 | 389 | | 5 | 45 | 45 |
J'ai essayé une auto-jointure mais je ne suis pas exactement sûr de savoir comment limiter les résultats au lieu de la faire défiler. Je ne peut pas dépendre que de la valeur de l'id sera séquentielle pour un résultat donné, donc je ne suis pas en utilisant cette valeur. Je pourrais étendre le schéma d'inclure une sorte de valeur séquentielle.
C'est ce que j'ai essayé:
SELECT id, f.longueur, f2.la longueur, (f.longueur - f2.la longueur) QUE la différence DE foo f, foo f2
Merci à vous pour l'aider.
source d'informationauteur Doc Falken
Vous devez vous connecter pour publier un commentaire.
Ce qui pourrait vous aider (un peu).
Yipee!!! cela fait l'affaire:
Veuillez vérifier pour d'autres cas aussi, c'est de travailler pour les valeurs que vous avez posté!
Remarque c'est pour SQL Server 2005
De sorte qu'ils sont juste commandé la plus grande à la plus petite?
Vous pouvez utiliser
COALESCE
(ouIFNULL
) au lieu deISNULL
pour MySQL.Ce que quelque chose comme cela:
edit: fixe lors de la re-lecture Q (mal compris)
id est ambigu
edit: remarque: testé en mysql 5.0
J'ai eu ce problème et il est intéressant de regarder vos solutions.
Je trouve étrange qu'une telle normale problème de la vie est si compliquée dans SQL.
Comme j'ai besoin de les valeurs dans un rapport seulement, j'ai choisi une solution complètement différente.
Je suis en cours d'exécution Ruby on Rails avant la fin de ma base de données sqlite3, et viens de faire la soustraction dans la vue comme:
Dans votre ruby contrôleur, il y a un objet variable @foo qui contient le nombre de lignes retournées par la requête.
Dans la vue, il suffit de faire
Semble être plus robuste que le SQL des solutions.