mysql - 更新某些用户的表值,但保持某些行不变

标签 mysql sql

我有一个名为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/

相关文章:

MySQL 多数据库设置

mysql - 使用 IF、AS 和 LIKE 进行 SQL 查询

MySQL Workbench 数据库错误

sql - 创建与 SQL Server 的所有可能组合

sql - 如何翻译 SQL 语句以在 sqlx API 调用中使用?

java - 如何确定返回了哪个 SQLException/错误代码列表在哪里?

mysql - 选择没有auto_increment或表数据的每隔一行mysql

MySQL 为多行生成 UUID()

MySQL SELECT IN 单值

sql - 如何更改 SQL Server 中的自动增量语句?