Mysql 使用时间和计数之间的时间间隔(列)更新表格>;1.

Mysql 使用时间和计数之间的时间间隔(列)更新表格>;1.,mysql,Mysql,我在这个MySQL查询中遇到了问题- UPDATE users SET field = 1 WHERE time BETWEEN '_time1_' and '_time2_' AND count(email) > 1; 它说我在count()处使用group by函数时出错。我也试过数数。我不确定如何指定此查询,实际答案可能比我想象的更嵌套 计数(列)似乎与SELECT一起使用,但与UPDATE不一起使用。假设您希望在time1和time2中更新多个出现的记录,这应该可以做到:

我在这个MySQL查询中遇到了问题-

UPDATE users

SET field = 1

WHERE time BETWEEN '_time1_' and '_time2_'

AND count(email) > 1;
它说我在count()处使用group by函数时出错。我也试过数数。我不确定如何指定此查询,实际答案可能比我想象的更嵌套


计数(列)似乎与SELECT一起使用,但与UPDATE不一起使用。

假设您希望在
time1
time2
中更新多个出现的记录,这应该可以做到:

UPDATE users
SET field = 1
WHERE
  time BETWEEN '_time1_' AND '_time2_'
  AND (
    SELECT COUNT(email)
    FROM users AS ucount
    WHERE ucount.time BETWEEN '_time1_' AND '_time2_'
      AND users.email = ucount.email
    GROUP BY ucount.email
  ) > 1
但是请记住:在执行高风险批量更新之前或在事务中备份数据,并确保在提交之前正确备份数据

您还可以通过这样做来检查要更新的内容:

SELECT * -- Just replace 'UPDATE' for 'SELECT * FROM'
FROM users
-- SET field = 1 -- And comment 'SET' to perform the SELECT
WHERE
  time BETWEEN '_time1_' AND '_time2_'
  AND (
    SELECT COUNT(email)
    FROM users AS ucount
    WHERE ucount.time BETWEEN '_time1_' AND '_time2_'
      AND users.email = ucount.email
    GROUP BY ucount.email
  ) > 1

如果运行
UPDATE
查询,上述查询将返回将被更新的所有记录。

COUNT()
实际上是一个分组函数,它返回按指定列分组的行数。在运行此更新之前,您需要运行子查询以按公共列值对用户记录进行分组。请向我们展示一个用户记录的示例。每个用户是否有多个记录?如何对它们进行分组?我正在尝试标记所有记录,这些记录包含在一个时间帧秒集之间多次出现的电子邮件,需要进行注释,因为选择oops!这件事没有引起注意。已经修复,感谢您指出@Kiwizoom!