mysql - 从 mySQL 数据库表中删除重复的用户条目

标签 mysql duplicates

我的数据库中有一个表来存储用户数据。我发现在将数据添加到此表数据库的代码中存在缺陷,如果发生网络超时,代码会使用前一个用户的数据更新下一个用户的数据。我已经解决了这个缺陷,但我需要清理数据库。我添加了一个标志来指示需要忽略的行,我的目标是相应地标记这些标志以防止重复。但在某些情况下,重复值实际上可能是合法的,因此我更感兴趣的是找到多个具有相同数据(即 u> 2)的用户。

这是一个例子(表名 = 数据):

id---- user_id----data1----data2----data3----datetime-----------flag

1-----usr1--------3---------- 2---------2---------2012-02-16..-----0

2-----usr2--------3---------- 2---------2---------2012-02-16..-----0

3-----usr3--------3---------- 2---------2---------2012-02-16..-----0

在这种情况下,我想将 1 和 2 id 标志标记为 1(表示忽略)。因为我们知道 usr1 是原始数据点(假设最早的日期在列表中较早)。

此时表中的条目太多,我不确定识别具有重复条目的用户的最佳方法。

我正在寻找一个 mysql 命令来首先识别问题数据,然后我将能够标记条目。有人可以指导我正确的方向吗?

最佳答案

那么,首先选择具有最小用户 ID 的重复数据:

CREATE TEMPORARY TABLE duplicates
  SELECT MIN(user_id), data1,data2,data3
  FROM data
  GROUP BY data1,data2,data3
  HAVING COUNT(*) > 1                       -- at least two rows
     AND COUNT(*) = COUNT(DISTINCT user_id) -- all user_ids must be different
     AND TIMESTAMPDIFF( MINUTE, MIN(`datetime`), MAX(`datetime`)) <= 45;

(我不确定我是否正确使用了 TIMESTAMPDIFF。) 现在我们可以更新那些 user_id 不同的行中的标志:

UPDATE     duplicate
INNER JOIN data      ON data.data1 = duplicate.data1
                    AND data.data2 = duplicate.data2
                    AND data.data3 = duplicate.data3
                    AND data.user_id != duplicate.user_id
SET data.flag = 1;

关于mysql - 从 mySQL 数据库表中删除重复的用户条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315228/

相关文章:

mysql - 更新MySQL重复记录

Java:如何不仅按名称搜索文件夹中的重复文件,还按大小和内容搜索重复文件?

MySQL - 搜索重复项

MySQL 查找一行中的重复项

Java - 数组 - 检查同一输入中的重复项

mysql - 新鲜的 MySQL Workbench 安装在 Mac OSX Lion 上没有响应

php - Symfony 1.4 动态模板

sql - 使用SQL显示数据

mysql - 使用具有不同日期格式的jsp将日期字段插入数据库

mysql - 如何将连接限制为每条记录一个结果,以便 MYSQL