基于第一个id更新id为的行的第二个数量



我的原始数据如下:

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

所需输出如下:

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

其目的是获取id第一次出现的金额,并在第二次出现时更新金额我正在尝试以下代码:

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 ;

将表连接到一个查询,该查询返回每个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;

请参阅演示

相关内容

  • 没有找到相关文章

最新更新