Rumah  >  Soal Jawab  >  teks badan

Kemas kini id baris kedua berdasarkan id pertama

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粉818088880P粉818088880264 hari yang lalu408

membalas semua(1)saya akan balas

  • P粉904450959

    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.

    balas
    0
  • Batalbalas