Home > OS >  Update second amount of row with id based on the first id
Update second amount of row with id based on the first id

Time:12-22

My original data is as follows:

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

The desired output is follows:

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

THe intention is to take the amount where id appears first and update the amount the second time it appears I am trying the following 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 ;

CodePudding user response:

Join the table to a query that returns the min sid of each id and again to itself so that you get the rows with that min 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;

See the demo.

For MySql 8.0 you can do it with only 1 join if you use ROW_NUMBER() window function:

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;

See the demo.

  • Related