gpt4 book ai didi

mysql - 使用下面提到的条件编写一个查询来删除 oracle 数据库中的重复记录 :

转载 作者:行者123 更新时间:2023-11-29 17:58:47 27 4
gpt4 key购买 nike

标准:1) 2列的独特组合(column1,column2)

2)保留该组合中最旧的一个

3) 记录可能相同,即相同的列 1、列 2 和创建日期,在这种情况下需要具有较小 id 的记录。

例如数据如下:

ID      column1     column2     creation_date(dd-mm-yyyy)       
1 11 aa 10/5/2016
2 11 aa 11/6/2016
3 12 bb 10/5/2017
4 12 bb 20-05-2017
5 12 cc 10/5/2016
6 12 cc 11/5/2017
7 13 dd 10/1/2018
8 13 dd 10/1/2018

我需要保留 id 为:1,3,5,7 的记录

我想到的方法是:

a) 首先编写选择查询来获取所需的记录(本例中为 1,3,5,7)

b) 编写更新查询以使用更新查询将状态更改为已删除(软删除)

还请建议是否有其他更好的方法来满足标准。

附加信息:*总记录数:11k

*我不想直接从表中获取记录,而是希望有一个仅获取所需数据的查询,需要对这些记录运行查询

*最终目标是修改重复记录的状态以删除并将已删除的单词附加到这些记录

最佳答案

如果您使用分析函数,这真的很简单。该查询由三个部分组成:

A) 为每条记录分配一个排名,如下所示: 按第 1 列和第 2 列对记录进行分组。在每个组中,首先按创建日期对记录进行排序,然后按 ID 对记录进行排序。将 1 分配给第一条记录,将 2 分配给第二条记录,依此类推。

B) 仅保留重复项,即具有较新创建日期和/或 ID 的记录。 rnk = 1 的记录将是您请求的记录。 rnk > 1 的记录是重复记录。

C) 使用 ROWID 删除重复项

delete
from your_table
where rowid in(-- (C)
select duplicate_rowid
from (select rowid as duplicate_rowid
,row_number() over( -- (A)
partition by column1, column2 -- Your criterion 1
order by creation_date asc -- Your criterion 2
,id asc -- Your criterion 3
) as rnk
from your_table
)
where rnk > 1 -- (B)
);

关于mysql - 使用下面提到的条件编写一个查询来删除 oracle 数据库中的重复记录 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48577569/

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