我是SQL初学者。
我在MariaDB中有一个包含以下字段的表
(我添加了具有自动递增功能的ID。)
现在,我需要删除具有相同DATE的行。
如果这是熊猫的数据框,则是一种解决方法,
<header>
<nav>
<div class = "navbar">
<div class = "logo"><h1>Rick Wilson</h1></div>
<div class = "links">
<a href="#">Experience</a>
<a href="#">Projects</a>
<a href="#">Technology Stack</a>
<a href="#">Contact</a>
</div>
</div>
</nav>
</header>
如何在SQL中执行此操作?
样本数据
df = df.drop_duplicates ()
所需数据
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
我的环境详细信息:
Windows版本:Home 64位
XAMPP版本:7.2.8控制面板
版本:3.2.2 [编译:2015年11月12日]
通过TCP / IP的127.0.0.1
未使用MariaDB SSL
10.1.34-MariaDB-mariadb.org二进制分发协议版本:10
字符集:UTF-8 Unicode(utf8)
发表评论
对于已回答的命令
任何建议都值得赞赏!
答案 0 :(得分:1)
如果要删除日期在表中多次出现的每条记录,可以按以下步骤操作:
DELETE t
FROM mytable t
INNER JOIN (
SELECT datetime FROM mytable GROUP BY datetime HAVING COUNT(*) > 1
) t1 ON t1.datetime = t.datetime;
在您的问题被编辑后,我了解到您要删除重复行中的一个,而保留另一行。
要实现此目的,您将需要一列来唯一标识重复项组中的每条记录。我们将该列称为id
。
DELETE t FROM mytable t
INNER JOIN mytable t1 ON t1.datetime = t.datetime AND t1.id < t.id;
答案 1 :(得分:0)
如果这与整行重复有关,我建议重新加载表。您可以为此使用临时表:
create table temp_t as
select distinct *
from t;
然后,您可以将其重新放回原始表中,如下所示:
truncate table t;
insert into t
select *
from temp_t;
通常,我会在insert
中包括所有列。但是对于这种类型的处理,代码使用select *
来生成临时表,它只是重新插入到原始表中。
通过使用truncate
/ insert
,您可以节省记录和锁定表的大量开销。