ehs*_*nul 0 sql postgresql unique duplicates
我已经将8000万条记录插入到表中,但需要确保一些列是共同唯一的.但是,列已包含非唯一数据,因此ALTER TABLE不起作用.
我想要一个允许我轻松删除非唯一记录的查询,同时保留其中一个记录,或者允许我将当前表中的数据加载到新表中,同时过滤唯一性.
您正在寻找的查询是:
select distinct on (my_unique_1, my_unique_2) * from my_table;
Run Code Online (Sandbox Code Playgroud)
这为每个列组合选择一行distinct on.实际上,它始终是第一排.它很少使用,order by因为没有可靠的顺序返回行(因此这是第一个).
结合order by您可以选择第一行(这会留下具有最大last_update_date的行):
select distinct on (my_unique_1, my_unique_2) *
from my_table order by my_unique_1, my_unique_2, last_update_date desc;
Run Code Online (Sandbox Code Playgroud)
现在您可以将其选择为新表:
create table my_new_table as
select distinct on (my_unique_1, my_unique_2) *
from my_table order by my_unique_1, my_unique_2, last_update_date desc;
Run Code Online (Sandbox Code Playgroud)
或者您可以将其用于删除,假设row_id是主键:
delete from my_table where row_id not in (
select distinct on (my_unique_1, my_unique_2) row_id
from my_table order by my_unique_1, my_unique_2, last_update_date desc);
Run Code Online (Sandbox Code Playgroud)