Essayer de faire ce qui suit: si la colonne c1 de la ligne courante est égale à c1 de la rangée précédente, mettre la colonne c3 à la colonne c2 de la rangée précédente; sinon, définissez c3 sur NULL (ou ne le définissez pas sur n'importe quoi). Quelqu'un peut-il me dire pourquoi la requête suivante dans c3 étant nulle pour chaque ligne?mysql: mettre la colonne à la valeur de la rangée précédente en fonction de la valeur d'une autre colonne
Les colonnes fictives sont juste là pour pouvoir définir les variables @ c1 et @ c2, qui sont supposées stocker les valeurs c1 et c2 de cette ligne à utiliser pour la ligne suivante. BTW, ai-je tort de supposer que c3 sera mis à jour en premier, c'est-à-dire qu'il obtiendra la valeur précédente de @ c2 (avant que c2 ne soit affecté au c2 actuel)?
UPDATE t SET c3 = IF (c1 = @c1, @c2, NULL), dummy1 = @c1:=c1, dummy2 = @c2:=c2;
Oui, j'ai complètement oublié la commande - 'ORDER BY id, c1' travaillé pour moi! Bon point de ne pas avoir besoin des colonnes factices. Merci! – Yury
Juste curieux de savoir pourquoi «ORDER BY id' seul ne le fait pas pour moi - des idées? AFAIK, il n'y a pas de null dans les deux colonnes (déjà fermé, mais vérifiera le matin). – Yury
Puisqu'il existe plusieurs lignes avec chaque valeur d'ID, il existe des liens, et l'ordre des lignes avec le même ID est imprévisible. Désolé j'ai oublié à ce sujet dans ma réponse. –