如何删除在MySQL的重复项目?

问题描述 投票:0回答:2

我是一个SQL初学者。我有一个表中MariaDB的以下字段 (我已经添加了ID具有自动递增。)

现在,我需要除去具有相同的日期行。 一种方式做到这一点,如果这是熊猫的数据帧,

df = df.drop_duplicates ()

我怎样才能在SQL这样做呢?

样本数据

date/open/high/low/close/volume    
2019.02.04 00:00:00 13.34303    13.34303    13.34143    13.34303    4
2019.02.04 00:01:00 13.34303    13.34303    13.34303    13.34303    2
★ 2019.02.04 00:02:00   13.34303    13.34323    13.34303    13.34323    2
★2019.02.04 00:02:00    13.34303    13.34323    13.34303    13.34323    2
2019.02.04 00:04:00 13.33663    13.33743    13.33623    13.33733    86
2019.02.04 00:05:00 13.33734    13.33734    13.33613    13.33613    70

所需数据

2019.02.04 00:00:00 13.34303    13.34303    13.34143    13.34303    4
2019.02.04 00:01:00 13.34303    13.34303    13.34303    13.34303    2
★2019.02.04 00:02:00    13.34303    13.34323    13.34303    13.34323    2
2019.02.04 00:03:00 13.34333    13.34333    13.33664    13.33664    14
2019.02.04 00:04:00 13.33663    13.33743    13.33623    13.33733    86
2019.02.04 00:05:00 13.33734    13.33734    13.33613    13.33613    70

我的环境详细信息:

Windows版本:家庭64位 XAMPP版本:7.2.8控制面板 版本:3.2.2 [编译:2015年11月12日] 通过TCP / IP 127.0.0.1 不使用MariaDB的SSL 34年1月10日,MariaDB的 - mariadb.org二进制分发协议版本:10 字符集:UTF-8的Unicode(UTF-8)

发表评论

为了回答命令

任何建议表示赞赏!

mysql sql mariadb
2个回答
1
投票

如果您正在寻找删除每一个记录其日期多次出现在餐桌上,你可以进行如下操作:

DELETE t 
FROM mytable t
INNER JOIN (
    SELECT datetime FROM mytable GROUP BY datetime HAVING COUNT(*) > 1
) t1 ON t1.datetime = t.datetime;

Demo on DB Fiddle


你的问题进行修改后,我知道你想删除重复的行之一,同时保持其他。

要做到这一点,你需要一个列,用于唯一标识重复的组,每个组的记录。让我们把该列id

DELETE t FROM mytable t
INNER JOIN mytable t1 ON t1.datetime = t.datetime AND t1.id < t.id;

Demo on DB Fiddle


0
投票

如果关于在整个行重复,我会建议重新加载表。您可以使用临时表用于此目的:

create table temp_t as
    select distinct *
    from t;

然后,你可以把这个回原表:

truncate table t;

insert into t
    select * 
    from temp_t;

通常情况下,我将包括在insert所有列。但是,对于这种类型的处理,代码中使用select *生成临时表,它只是将回到原始表。

通过使用truncate / insert,为您节省大量的开销日志记录,并锁定该表。

© www.soinside.com 2019 - 2024. All rights reserved.