Comme je suis nouveau à MySQL, cette question peut être idiote. Comment puis-je trouver la différence entre des rangées successives? ici, je veux obtenir la sortie comme, p> Comment trouver la différence comme celle-ci sans index (primaire ou auto_incrètent)? P> p>
Exemple:
Une table (Tablename = 'abc') contient une seule ligne comme suit,
3 Réponses :
Il serait préférable de le faire en dehors de la DB en gardant une trace de la ligne précédente. Voici un certain code (j'espère que mon PHP n'est pas trop rouillé): Si vous devez le faire dans la DB pour une raison quelconque, il serait probablement préférable de créer une procédure stockée qui sera essentiellement Faites la même chose: instanciez une variable avec la valeur 0, signalez la différence pour chaque ligne et cette variable, puis définissez la variable de la valeur de la ligne. P> modifié pour ajouter une commande par clause comme indiqué par John Pick p> p>
Un auto-join est un moyen de comparer des lignes consécutives:
sur t1.data
@prajeeshkumar the Join serait triangulaire (x * x + x) / 2 code> s'il n'y avait pas pour min () code>, ce qui garantit les lignes correspondant 1: 1, sauf La dernière ligne qui ne correspond à rien. Le résultat est x-1 code> lignes.
Cela semble fonctionner uniquement pour des jeux de données monotoniquement croissants, non? Ai-je oublié quelque chose? Lorsque je l'exécute, je reçois soit un singleton (quand il n'y a pas de différence entre les valeurs) ou une différence de temps incorrecte (lorsque le jeu de données est non monotonique).
En utilisant le groupe au lieu de l'ordre en me donne les résultats que je cherche
Utiliser des variables définies par l'utilisateur:
SET @prevValue:=0; UPDATE t SET diff=IF((@d:=value-@prevValue) AND (@prevValue:=value),@d,@d);
C'est une colonne, pas une ligne, et c'est seulement ordonné par coïntement. À moins que vous n'utilisiez une commande par clause dans une instruction SQL, MySQL peut renvoyer les données dans n'importe quel ordre.