我有一个名为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不受影响。
答案 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