mysql - 在 Mysql 中标记旧的重复项

标签 mysql sql duplicates

我有一个表属性

source|   address   |   price   |   size   |   created_at   |duplicate
file1 |Fleet St., 1 | 230.00    | 13       | 2019-12-01     | 0
file2 |Help St.43   | 90.00     | 4        | 2018-5-5       | 0
file1 |Fleet St., 1 | 230.00    | 13       | 2019-10-01     | 0
file1 |Fleet St., 1 | 230.00    | 13       | 2017-10-01     | 0

我需要根据来源、地址、价格和大小查找重复项,并将除最近的以外的所有项都标记为重复项。

低于所需的输出。

source|   address   |   price   |   size   |   created_at   |duplicate
file1 |Fleet St., 1 | 230.00    | 13       | 2019-12-01     | 0
file2 |Help St.43   | 90.00     | 4        | 2018-5-5       | 0
file1 |Fleet St., 1 | 230.00    | 13       | 2019-10-01     | 1
file1 |Fleet St., 1 | 230.00    | 13       | 2017-10-01     | 1

我提出了以下查询来识别重复项,但我不知道如何继续。

SELECT
    source,
    address,
    COUNT(address),
    price,
    COUNT(price),
    size,
    COUNT(size),
    MAX(created_at)
FROM properties
GROUP BY
    source,
    address,
    price,
    size
HAVING
    COUNT(address) > 1 AND
    COUNT(price) > 1 AND
    COUNT(size) > 1 AND
    COUNT(source) > 1

我们将不胜感激。

最佳答案

如果要更改值,请使用 update。在这种情况下,使用 from 和聚合查询:

update properties p join
       (select source, address, price, size,
               max(created_at) as max_created_at
        from properties
        group by source, address, price, size
       ) pp
       using (source, address, price, size)
    set p.is_duplicate = 1
where p.created_at < pp.max_created_at;

请注意,这不会将最近的重复值设置为 0。如果您的数据以 NULL 值开头,则使用:

update properties p join
       (select source, address, price, size,
               max(created_at) as max_created_at
        from properties
        group by source, address, price, size
       ) pp
       using (source, address, price, size)
    set p.is_duplicate = (p.created_at < pp.max_created_at);

关于mysql - 在 Mysql 中标记旧的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57645301/

相关文章:

php数组中的多个mysql命令

sql - 仅选择组中所有元素都具有相同值的组

如果行值与以前的值发生变化,则 SQL 查询打印所有行

bash - 计算文本文件中重复行数的更简单方法

mysql - 如何在 MySQL 中重置 AUTO_INCRMENT

python - MySQL 服务器已经消除了 Pylons、SQLAlchemy、Apache 的错误

java - 在 hibernate 中使用 MySQL 变量和赋值

php - 查询/子查询中的总和

sql - 如何在大表中选择重复的行/记录

sql-server - 连接 2 个表时排除输出中重复列的 T-SQL 语法是什么?