如何删除mySQL中的重复项?
我是SQL初学者。 我有一个表,表中有以下字段 我添加了具有自动增量的id。 现在,我需要删除具有相同日期的行。 一种方法是,如果这是熊猫的数据帧如何删除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.
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;