繁体   English   中英

从没有主键的 SQL 表中删除重复项

[英]Removing Duplicates from table in SQL with no primary key

我正在尝试从表中删除重复项,例如:

Country State   City    Rate1   Rate2   Rate3
US      CA     Irvine   1       13      22
US      CA     Irvine   0       0       0
US      WA     Seattle  1       231     22
US      WA     Seattle  0       0       0

我正在尝试删除所有费率列 = 0 的重复记录

所以我想删除以下行:

Country State   City    Rate1   Rate2   Rate3
US      CA     Irvine   0        0      0
US      WA     Seattle  0        0      0

以下查询的变体:

WITH CTE AS(
SELECT myTable.*
, RN = ROW_NUMBER()OVER(PARTITION BY patientID ORDER BY ID)
FROM myTable 
)
SELECT * FROM CTE
WHERE RN = 1

好的......所以像:

WITH CTE AS(
SELECT 
    myTable.*,
    RN = ROW_NUMBER()OVER(PARTITION BY Country, State, City ORDER BY Rate1 DESC)
FROM myTable 
)
DELETE FROM CTE
WHERE RN <> 1

不知道您要订购什么...您如何决定要删除哪些重复项? 在此示例中,它将删除 Rate1 低于最大值的所有内容

尝试如下,使用计数窗口函数确保值重复

   WITH CTE AS(
        SELECT *,
        count()OVER(PARTITION BY Country, State, City ) as cnt    
        FROM myTable 
    ) delete from cte where cnt>1 and rate1=0 and rate2=0 and rate3=0
WITH CTE AS(
SELECT 
    myTable.*,
     ROW_NUMBER()OVER(PARTITION BY Country, State, City ORDER BY Rate1 DESC) AS RN
FROM myTable 
)
DELETE FROM CTE
WHERE RN > 1
AND Rate1 =0 AND  Rate2 =0 AND  Rate3 =0 --since you mentioned only duplicates where all rates are 0 need to be removed

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM