Rumah > Soal Jawab > teks badan
Data asal saya adalah seperti berikut:
sid id amount 1 12 30 2 45 30 3 45 50 4 78 80 5 78 70
Keluaran yang dikehendaki adalah seperti berikut:
sid id amount 1 12 30 2 45 30 3 45 30 4 78 80 5 78 80
Tujuannya adalah untuk mendapatkan jumlah apabila id muncul buat kali pertama dan mengemas kini jumlah apabila ia muncul untuk kali kedua Saya sedang mencuba kod berikut:
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
Sertai jadual untuk pertanyaan yang mengembalikan baris untuk setiap 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;
Lihat Demo.
Untuk MySql 8.0+, jika anda menggunakan ROW_NUMBER()
fungsi tetingkap, ini boleh dilakukan dengan hanya 1 sambungan:
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;
Lihat Demo.