我的原始資料如下:
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 ;
uj5u.com熱心網友回復:
將表連接到一個查詢,該查詢將sid每個的 min 回傳id給自身,以便您獲得具有該 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;
請參閱演示。
對于 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;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/389444.html
