我有一个名为purchases
的表,其中包含id(int)
、user(int)
、priority(int)
和 timestamp(TIMESTAMP)
,我想将某些任意用户组的具有值 A 的购买优先级更改为其他值 B,以便每个 用户
他们最新购买的两项仍保持不变,并且所有较早的购买都更改为值 B。
我该如何使用 SQL 来做到这一点?
查询如下:
UPDATE purchases
SET priority = @newpriority
WHERE user IN (@usergroup)
AND priority = @oldpriority
GROUP BY user
HAVING count(*) > 2
将更改具有该优先级的超过 2 行的用户的所有行,但我想保持两个最新的购买案例不变。
最佳答案
SELECT user
,priority
,Amount
FROM
(
SELECT @row_num := IF(@prev_value=o.user,@row_num+1,1) AS RowNumber
,o.user
,o.priority
,@prev_value := o.user
FROM Orders o,
(SELECT @row_num := 1) x,
(SELECT @prev_value := '') y
where user IN (@usergroup) AND priority = @oldpriority
ORDER BY o.user, o.timestamp DESC
) subquery
WHERE RowNumber > 2
我不熟悉Mysql,但我想说Rownumber可以解决这个问题。我已经尝试解决这个问题。
以上将选择所有较旧的交易,排除最新的 2 笔交易。例如 here
关于mysql - 更新某些用户的表值,但保持某些行不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37177441/