为某些用户更新表的值,但保留一些行不变

时间:2016-05-12 04:42:16

标签: mysql sql

我有一个名为purchases的表,其中包含id(int)user(int)priority(int)timestamp(TIMESTAMP)列,我想更改已购买的商品的优先级对于某些任意用户组,值A对于某个其他值B,这样每个user的两个最新购买仍未触及,并且所有旧购买都更改为值B.

我如何使用SQL?

如下的查询:

UPDATE purchases 
SET priority = @newpriority 
WHERE user IN (@usergroup) 
AND priority = @oldpriority 
GROUP BY user 
HAVING count(*) > 2 

会更改具有该优先级的超过2行的用户的所有行,但我想保持两个最新的purhcases不受影响。

1 个答案:

答案 0 :(得分:0)

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会解决这个问题。我试图解决这个问题。

以上将选择所有旧的transcation,排除最新的2个交易。示例是here