SQL-删除重复项

时间:2018-09-18 16:36:18

标签: sql db2

尽管从技术上讲不是重复的,但是有一种方法可以删除只有1列不同的结果吗?希望保留最高百分比的行。

数据库:DB2

无论如何,我可以删除可能是这样的重复项吗?:

ID| NAME | VALUE
1 | Test | 0.3455%
1 | Test2 | 0.435%
5 | Test | 0.3455%
5 | Test2 | 0.435%

样本数据:

ID |       NAME       |  VALUE
42 | Water Fill Level | 0.78345%
42 | Valve Fill Level | 0.8546%
65 | Water Fill Level | 0.8934%
65 | Valve Fill Level | 0.93564%

5 个答案:

答案 0 :(得分:1)

如果您还有其他列,则可能需要:

select t.*
from (select t.*, row_number() over (partition by id, column1 order by column2 desc) as seqnum
     from t
    ) t
where seqnum = 1;

答案 1 :(得分:0)

select id, column1, max(column2) 
from table
group by id, column1

此查询获取每个ID(第1列)的最大百分比。可以使用此查询创建一个新表,然后可以将该表重命名为原始表以获得所需的结果。

答案 2 :(得分:0)

您要的内容在技术上不确定。 假设你有

enter image description here

现在,绝对不确定结果应该是什么(当您有3列时有3种可能性)。尝试使您的方法更全面。然后根据您的具体需求来编辑您的问题。

答案 3 :(得分:0)

要删除不需要的行,这是最简单的方法

DELETE FROM
(   SELECT T.*
    ,      ROW_NUMBER() OVER (PARTITION BY ID, NAME ORDER BY VALUE DESC) AS SEQNUM
    FROM T
)
WHERE SEQNUM > 1

答案 4 :(得分:0)

您的价值栏是否正确地使用比较运算符进行评估?如果是这样,这应该可行:

delete from mytable a where value < 
(select max(value) from mytable b where a.id = b.id and a.name = b.name)

如果由于“值”列中的值相同而仍然存在重复项,则可以使用以下方法删除其余项:

delete from mytable a where rrn(a) < 
(select max(rrn(b)) from mytable b where a.id = b.id and a.name = b.name and a.value = b.value)

如果比较运算符的行为不正确(将以上查询从Deletes更改为selects以进行检查,则应进行检查!),则可能需要做一些技巧才能使其工作。 regexp_replace()和cast将是我前进的方向。如果我误解了您,并且您想删除所有具有相同ID或相同名称的较小百分比,请在查询中将“ and”更改为“ or”:

delete from mytable a where value < 
(select max(value) from mytable b where a.id = b.id or a.name = b.name)