Aktualisieren Sie die ID der zweiten Zeile basierend auf der ersten ID
P粉818088880
P粉818088880 2024-01-28 23:38:16
0
1
448

Meine Originaldaten lauten wie folgt:

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

Die gewünschte Ausgabe ist wie folgt:

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

Der Zweck besteht darin, den Betrag abzurufen, wenn die ID zum ersten Mal angezeigt wird, und den Betrag zu aktualisieren, wenn sie zum zweiten Mal angezeigt wird Ich versuche den folgenden Code:

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

Antworte allen(1)
P粉904450959

将表连接到一个查询,该查询返回每个 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 

查看演示

对于 MySql 8.0+,如果使用 ROW_NUMBER() 窗口函数,则只需 1 个连接即可完成:

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;

查看演示

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage