gpt4 book ai didi

sql - 如何只删除多余的数据?

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:34 25 4
gpt4 key购买 nike

如果我有这样的表:

ID      FROM_DATE           TO_DATE
18177 2016-04-20 00:00 2016-04-20 00:00
18177 2016-04-20 00:00 2016-04-20 00:00
18177 2016-04-23 00:00 2016-04-23 00:00
18177 2016-04-23 00:00 2016-04-23 00:00
18177 2016-04-24 00:00 2016-04-24 00:00
18177 2016-04-24 00:00 2016-04-24 00:00
18177 2016-04-26 00:00 2016-04-26 00:00
18177 2016-04-26 00:00 2016-04-26 00:00
18177 2016-04-27 00:00 2016-04-27 00:00
18177 2016-04-27 00:00 2016-04-27 00:00
18177 2016-04-30 00:00 2016-04-30 00:00
18177 2016-04-30 00:00 2016-04-30 00:00

这个表没有键,我发现自己需要设置由三列组成的主键,但是我不能这样做,因为数据重复。

如何删除多余的数据?比如我有两条数据相同的记录,我想只保留一条记录?

我想要这样的结果来解决问题并设置 key :

ID      FROM_DATE           TO_DATE
18177 2016-04-20 00:00 2016-04-20 00:00
18177 2016-04-23 00:00 2016-04-23 00:00
18177 2016-04-24 00:00 2016-04-24 00:00
18177 2016-04-26 00:00 2016-04-26 00:00
18177 2016-04-27 00:00 2016-04-27 00:00
18177 2016-04-30 00:00 2016-04-30 00:00

最佳答案

这个有用吗?

delete from t
where rowid not in (select min(rowid)
from t
group by id, from_date, to_date
);

默认情况下,Informix 表有一个内置的 rowid 列。如果这个版本确实有效,您可以将子查询放入一个临时表中并使用它。

另请注意:这样做通常更快:

select distinct id, from_date, to_date
from t
into temp temp_t;

truncate table t;

commit; -- If there was a transaction active

insert into t(id, from_date, to_date)
select id, from_date, to_date
from temp_t;

由于大量删除的日志记录和锁定注意事项,这可能会更快。

关于sql - 如何只删除多余的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36864054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com