尽管从技术上讲不是重复的,但是有一种方法可以删除只有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%
答案 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)
答案 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)