suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Aktualisieren Sie die ID der zweiten Zeile basierend auf der ersten ID

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粉818088880P粉818088880307 Tage vor444

Antworte allen(1)Ich werde antworten

  • P粉904450959

    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;

    查看演示

    Antwort
    0
  • StornierenAntwort