如何删除mySQL中的重复项?

如何删除mySQL中的重复项?,mysql,sql,mariadb,Mysql,Sql,Mariadb,我是SQL初学者。 我有一个表,表中有以下字段 我添加了具有自动增量的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.

我是SQL初学者。 我有一个表,表中有以下字段 我添加了具有自动增量的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版本:Home 64位XAMPP版本:7.2.8控制面板 版本:3.2.2[编制日期:2015年11月12日] 未使用通过TCP/IP的127.0.0.1 SSL 10.1.34-MariaDB-MariaDB.org二进制分发协议版本:10字符集:UTF-8 Unicode utf8

征求意见

为了响应命令


任何建议都将不胜感激

如果您希望删除每个日期在表中出现多次的记录,您可以按如下操作:

DELETE t 
FROM mytable t
INNER JOIN (
    SELECT datetime FROM mytable GROUP BY datetime HAVING COUNT(*) > 1
) t1 ON t1.datetime = t.datetime;
编辑您的问题后,我知道您希望删除其中一个重复行,同时保留另一行

要实现这一点,您将需要一个列来唯一标识重复组中的每条记录。我们称之为列id


如果这是关于整行重复的,我建议重新加载表。为此,您可以使用临时表:

create table temp_t as
    select distinct *
    from t;
然后,您可以将其放回原始表中,如下所示:

truncate table t;

insert into t
    select * 
    from temp_t;
通常,我会在插入中包含所有列。但是对于这种类型的处理,代码使用select*生成临时表,它只是插入到原始表中


通过使用truncate/insert,您可以节省大量记录和锁定表的开销。

请提供示例数据和所需结果。还要解释一下重复是什么意思。我指的是重复,相同日期项的数量>=2日期列的第一列是哪种数据类型?列的名称是什么?您的表有id吗?主键?如果您没有主键,则无法删除单个rowAH!我没有!我将尝试设置答案中给出的键和命令!例如,感谢您,但是,SQL返回了错误;SQL 0A80E90FC 1064:您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第行的“从外汇中选择日期”中的“tWHERE t.date IN SELECT date FROM forex.euruds ask GROUP BY date HA”附近使用的正确语法1@Xminer:我想是因为datae是SQL关键字,所以我更新了查询以使用表别名,请check@Xminer问题是t和WHERE关键字之间没有空格,请参见错误部分tWHERE t.date IN@GMB-date就是我所说的半保留字。它和少量其他关键字在大多数上下文中都可以用作列名。。。为成功之前的无数次尝试感到抱歉!我以为这会有用,但是。。。选择日期,从SELECT*FROM forex.temp计算*c,按日期说明订单限额9000,按日期分组,c>1;`显示超过2个…保留重复行…@Xminer。您没有每行的唯一标识符。在这种情况下,我建议要么添加一个自动递增列,要么像这个答案所建议的那样重新生成表。我已经有了IDSA,我错了吗?请检查,我更新了我的表格information@Xminer . . . 如果您有唯一的id,那么您的行不会重复。回答问题后,您不应更改问题。不,即使该表具有我刚才添加的唯一id,它也具有具有重复日期的行。
truncate table t;

insert into t
    select * 
    from temp_t;