Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从postgresql表中删除重复行_Sql_Postgresql_Duplicates_Sql Delete - Fatal编程技术网

如何从postgresql表中删除重复行

如何从postgresql表中删除重复行,sql,postgresql,duplicates,sql-delete,Sql,Postgresql,Duplicates,Sql Delete,我在testdb中的一个名为testtable的postgresql表中有以下数据集 我不小心复制了数据库并复制了行 如何删除重复项 第1行和第5行是此帧中的副本,第2行和第4行也是副本 我以前从未使用过sql删除重复项,我不知道从哪里开始 我试过了 date | window | points | actual_bool | previous_bool | creation_time | sourc

我在testdb中的一个名为testtable的postgresql表中有以下数据集

我不小心复制了数据库并复制了行

如何删除重复项

第1行和第5行是此帧中的副本,第2行和第4行也是副本

我以前从未使用过sql删除重复项,我不知道从哪里开始

我试过了


date        | window  | points  |    actual_bool      |         previous_bool          |       creation_time        | source 
------------+---------+---------+---------------------+---------------------------------+----------------------------+--------
 2021-02-11 |     110 |     0.6 |                   0 |                               0 | 2021-02-14 09:20:57.51966  | bldgh
 2021-02-11 |     150 |     0.7 |                   1 |                               0 | 2021-02-14 09:20:57.51966  | fiata
 2021-02-11 |     110 |     0.7 |                   1 |                               0 | 2021-02-14 09:20:57.51966  | nfiws
 2021-02-11 |     150 |     0.7 |                   1 |                               0 | 2021-02-14 09:20:57.51966  | fiata
 2021-02-11 |     110 |     0.6 |                   0 |                               0 | 2021-02-14 09:20:57.51966  | bldgh
 2021-02-11 |     110 |     0.3 |                   0 |                               1 | 2021-02-14 09:22:22.969014 | asdg1
 2021-02-11 |     110 |     0.6 |                   0 |                               0 | 2021-02-14 09:22:22.969014 | j
 2021-02-11 |     110 |     0.3 |                   0 |                               1 | 2021-02-14 09:22:22.969014 | aba
 2021-02-11 |     110 |     0.5 |                   0 |                               1 | 2021-02-14 09:22:22.969014 | fg
 2021-02-11 |     110 |     0.6 |                   1 |                               0 | 2021-02-14 09:22:22.969014 | wdda
 2021-02-11 |     110 |     0.7 |                   1 |                               1 | 2021-02-14 09:23:21.977685 | dda
 2021-02-11 |     110 |     0.5 |                   1 |                               0 | 2021-02-14 09:23:21.977685 | dd
 2021-02-11 |     110 |     0.6 |                   1 |                               1 | 2021-02-14 09:23:21.977685 | so
 2021-02-11 |     110 |     0.5 |                   1 |                               1 | 2021-02-14 09:23:21.977685 | dar
 2021-02-11 |     110 |     0.6 |                   1 |                               1 | 2021-02-14 09:23:21.977685 | firr
 2021-02-11 |     110 |     0.8 |                   1 |                               1 | 2021-02-14 09:24:15.831411 | xim
 2021-02-11 |     110 |     0.8 |                   1 |                               1 | 2021-02-14 09:24:15.831411 | cxyy
 2021-02-11 |     110 |     0.3 |                   0 |                               1 | 2021-02-14 09:24:15.831411 | bisd
 2021-02-11 |     110 |     0.1 |                   0 |                               1 | 2021-02-14 09:24:15.831411 | cope
 2021-02-11 |     110 |     0.2 |                   0 |                               1 | 2021-02-14 09:24:15.831411 | sand
 ...
但它所做的只是告诉我每天有多少份

像这样

select creation_time, count(creation_time) from classification group by creation_time having count (creation_time)>1 order by source;
每个创建时间戳中应该只有5条唯一的记录


它不会向我显示重复项,即使我显示了,它也不知道如何删除它们。

要删除的行太多了。我建议重新创建表格:

       creation_time        | count 
----------------------------+-------
 2021-02-14 09:20:57.51966  |    10
 2021-02-14 09:22:22.969014 |    10
 2021-02-14 09:23:21.977685 |    10
 2021-02-14 09:24:15.831411 |    10
 2021-02-14 09:24:27.733763 |    10
 2021-02-14 09:24:38.41793  |    10
 2021-02-14 09:27:04.432466 |    10
 2021-02-14 09:27:21.62256  |    10
 2021-02-14 09:27:22.677763 |    10
 2021-02-14 09:27:37.996054 |    10
 2021-02-14 09:28:09.275041 |    10
 2021-02-14 09:28:22.649391 |    10
...

验证数据后,如果确实需要,可以重新加载数据:

create table new_classification as
    select distinct c.*
    from classification c;

这个过程应该比删除90%的行快得多。

你有id列吗?没有,我应该做一个吗?每个表都应该有这样一个列,例如,用于识别特定记录……我第一次使用sql时,我没有意识到,我现在可以修复它并在删除重复项后添加id列吗?在删除更有用的内容之前添加id列。因为识别重复项非常容易,但如果无法正确寻址,则很难删除它们……这是一个好主意!:)天哪,非常感谢你,它成功了,你为我节省了很多时间。你能解释一下c类和c类的区别吗;命令的作用是什么?SELECT DISTINCT*返回不重复的表内容。c.*和c的作用是什么?@anarchy。
c
是一个表别名。
c.*
返回
c
引用的所有列。
truncate table classification;

insert into classification
    select *
    from new_classification;