在SQL中删除多个重复项,保留最大的id。

18 浏览
0 Comments

在SQL中删除多个重复项,保留最大的id。

我的数据库中包含大量重复的数据,每个数据都有一个独特的ID,但它们的PermitID和EncID是相同的。我需要删除数据库中除了最高ID之外的所有记录。

以下SQL语句:

删除所有记录。

我尝试过以下SQL语句:

但是我收到了以下错误信息:

子查询返回了多个值。这在子查询后面使用=,!=,<,<=,>,>=或将子查询用作表达式时是不允许的。

数据的示例为:

我想保留3,删除2和1。我还想保留5并删除4。

0
0 Comments

在SQL中,有时候我们需要从一个表中删除重复的数据,只保留具有最大ID的记录。这个问题的出现可能是由于数据表中存在重复的数据,我们只想保留最新的数据,而删除其他重复的数据。

为了解决这个问题,我们可以使用上面的SQL语句。这条SQL语句使用了嵌套查询和GROUP BY子句来删除重复的数据。首先,内部的SELECT语句使用GROUP BY子句根据EncID和PermitID分组,并选择每个组中具有最大ID的记录。然后,外部的DELETE语句使用NOT IN子句删除不在内部查询结果中的记录,从而删除了重复的数据,只保留了具有最大ID的记录。

这段代码的逻辑很简单,通过使用嵌套查询和GROUP BY子句,我们可以轻松地删除重复的数据。值得注意的是,在实际使用时,我们需要将"tblInvoices"替换为实际的表名,"ID"替换为实际的主键列名,"EncID"和"PermitID"替换为实际的分组列名。

总之,通过使用上述的SQL语句,我们可以简单地删除重复的数据,只保留具有最大ID的记录。这种方法非常简单有效,适用于许多情况下。

0
0 Comments

问题:Delete multiple duplicates leaving max id in sql

原因:在tblInvoices表中,存在多个重复的记录,需要删除其中的重复记录,只保留每个PermitID对应的最大ID。

解决方法:

1. 创建一个公用表表达式(CTE),命名为CTE。

2. 使用ROW_NUMBER()函数对每个PermitID进行分组,并按照ID的降序进行排序,将结果保存在RowNumber列中。

3. 在CTE表中,选取RowNumber小于13的记录进行删除操作。

具体SQL语句如下:

WITH CTE AS
(
    SELECT ROW_NUMBER() OVER (Partition BY PermitID ORDER BY ID) AS RowNumber, *
    FROM tblInvoices
    WHERE EncID = '0237'
)
DELETE FROM CTE 
WHERE RowNumber < 13

以上SQL语句可以删除tblInvoices表中EncID为'0237'的记录中,每个PermitID对应的除最大ID之外的其他重复记录。

0
0 Comments

在SQL中,有时候我们需要从一个表中删除多个重复的记录,但是保留每个重复记录中具有最大ID的那一条记录。这个问题的出现可能是由于数据录入错误或系统bug导致的重复记录。

为了解决这个问题,可以使用以下的SQL语句:

WITH cte AS

(

SELECT row_number() OVER (PARTITION by permitid ORDER BY Id DESC) r,ID,permitid,encid

FROM tblinvoices

)

DELETE FROM cte WHERE r > 1

上述代码使用了CTE(公共表表达式)和窗口函数来删除多个重复记录。首先,使用ROW_NUMBER函数对每个相同的permitid进行排序,并为每个记录分配一个行号。然后,从CTE中删除行号大于1的记录,即保留了每个重复记录中具有最大ID的那一条记录。

通过使用这段代码,我们可以有效地删除多个重复记录,只保留每个重复记录中具有最大ID的那一条记录,从而解决了这个问题。

0