这里的数据
KeyID |队列|支付
65的1的0
60的2 2的0
58的3 3的1
57 4 4 1 1
55 5 5 0
54 6 6 0 0
53 7 7 1 1
50颗8颗1
如果像这样的数据,我需要一个MySql查询来更新它,使其像下面的数据表那样仅更新Queue列。
KeyID |队列|支付
65的0的0
60的0 0的
58的1 1的
57的2 2的1
55的0 0的
54 0 0 0 0
53的3 3的1
50个4 4个1
我已经尝试过
更新tabl1 设置Queue =支付= 0时的情况,然后Queue = Queue-1否则Queue
但是队列编号看起来不是这样。
请提出建议。 预先谢谢你
答案 0 :(得分:0)
我们可以尝试加入计算顺序的子查询:
UPDATE yourTable k1
INNER JOIN
(
SELECT KeyID, rn
FROM
(
SELECT t1.KeyID,
(SELECT SUM(t2.Pay = 1) FROM yourTable t2
WHERE t2.KeyID >= t1.KeyID) rn
FROM yourTable t1
) t
) k2
ON k1.KeyID = k2.KeyID
SET
Queue = CASE WHEN Pay = 0 THEN 0 ELSE k2.rn END;
要查看以上逻辑的工作方式,以下是中间联接表的外观:
KeyID | Queue | Pay | rn
65 | 1 | 0 | 0
60 | 2 | 0 | 0
58 | 3 | 1 | 1
57 | 4 | 1 | 2
55 | 5 | 0 | 2
54 | 6 | 0 | 2
53 | 7 | 1 | 3
50 | 8 | 1 | 4
也就是说,最里面的相关子查询通过计算Pay
为1的次数来生成队列序列。
请注意,如果您使用的是MySQL 8+,则可以使用解析函数进行更简单的查询:
UPDATE yourTable
SET Queue = CASE WHEN Pay = 0
THEN 0
ELSE SUM(Pay = 1) OVER (ORDER BY KeyID DESC) END;