Mettre à jour l'identifiant de la deuxième ligne en fonction du premier identifiant
P粉818088880
P粉818088880 2024-01-28 23:38:16
0
1
440

Mes données d'origine sont les suivantes :

sid id  amount
1   12  30
2   45  30
3   45  50
4   78  80
5   78  70

Le résultat souhaité est le suivant :

sid id  amount
1   12  30
2   45  30
3   45  30
4   78  80
5   78  80

Le but est d'obtenir le montant lorsque l'identifiant apparaît pour la première fois et de mettre à jour le montant lorsqu'il apparaît pour la deuxième fois J'essaie le code suivant :

UPDATE foo AS f1
  JOIN
  ( SELECT cur.sl, cur.id,
           cur.amount AS balance 
    FROM foo AS cur
      JOIN foo AS prev
        ON prev.id = cur.id
    GROUP BY cur.tstamp
  ) AS p
  ON p.id = a.id
SET a.amount = p.amount ;

P粉818088880
P粉818088880

répondre à tous(1)
P粉904450959

Joignez la table à une requête qui renvoie des lignes pour chaque id 的最小值 sid 并再次返回其自身,以便获得具有该最小值 sid :

UPDATE tablename t1
INNER JOIN (
  SELECT MIN(sid) sid, id
  FROM tablename
  GROUP BY id
) t2 ON t2.id = t1.id AND t2.sid 

Voir Démo.

Pour MySql 8.0+, si vous utilisez ROW_NUMBER() les fonctions de fenêtre, cela peut être fait avec une seule connexion :

UPDATE tablename t1
INNER JOIN (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY sid) rn
  FROM tablename
) t2 ON t2.id = t1.id  
SET t1.amount = t2.amount
WHERE t2.rn = 1;

Voir Démo.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal