Heim > Fragen und Antworten > Hauptteil
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粉9044509592024-01-29 20:23:49
将表连接到一个查询,该查询返回每个 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 < t1.sid INNER JOIN tablename t3 ON t3.sid = t2.sid SET t1.amount = t3.amount;
查看演示。
对于 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;
查看演示。