【发布时间】:2021-09-24 10:14:52
【问题描述】:
我有一张如下所示的表格:
Week | Value1 | Value2 | Value3
-----|--------|--------|-------
1 | A | A | 5
1 | A | B | 10
1 | B | B | 15
2 | A | A | 10
2 | A | B | 15
2 | B | B | 20
2 | A | A | 10
2 | A | B | 15
2 | B | B | 25
我想删除 Week、Value1 和 Value2 匹配的多余行,但保留原始行不变。所以想要的结果应该是这样的:
Week | Value1 | Value2 | Value3
-----|--------|--------|-------
1 | A | A | 5
1 | A | B | 10
1 | B | B | 15
2 | A | A | 10
2 | A | B | 15
2 | B | B | 20
我可以使用此代码选择我需要删除的数据:
select *
from (
select *, row_number() over(partition by week, value1, value2 order by week, value1, value2) as row
from mytable
)
where row >1
请问有谁知道如何最好地从表中实际删除这些行?
我使用的是 db2 数据库,如果这有助于缩小哪些功能起作用/不起作用。
【问题讨论】:
-
当你谈到'剩余'时,你如何生成源表?它是如何填充的?根据这一点,解决方案可能会有所不同
-
你如何分辨哪一行要保留,哪一行要取消?例如,第 2 周的 B/B 行有两行,您保留 value3 = 20 的一行,关闭 value3 = 25 的一行。您如何做出该决定?
-
@Christophe 每周运行一个自动作业,以将该周的数据附加到表中。这项工作还从去年同期的同周数据中提取了同比数据,但由于它现在已经活跃了一年多,它开始提取已经在表格中的周数(现在已经纠正)。跨度>
-
@ThorstenKettner 如果行的 value3 数字不同,则应保留值较低的行。
-
所以我认为应该在自动化作业中进行更改以确保唯一性,之后管理会更加复杂