删除 DB2 中重复的重叠日期 Table
Remove duplicate overlapping dates in DB2 Table
与其他问题类似,但不同....
我有多个记录,并且标记了如果它们与其他记录有任何重叠(未标记为删除)则可能被删除的记录。我希望能够在 5+ 百万行 table.
上高效地执行此操作
这是我所拥有的...但它不起作用(没有找到我手动放入以进行测试的重复项)
delete from MYTABLE t1
where t1.DELETABLEFLAG = 'Y' and
exists
(select 1
from
MYTABLE t2
where
t2.MATCHCOLUMN = t1.MATCHCOLUMN
and t2.DELETABLEFLAG <>'Y'
and
((t1.START_DATE between t2.START_DATE and t2.END_DATE) or
(t1.END_DATE between t2.START_DATE and t2.END_DATE) or
(t2.START_DATE between t1.START_DATE and t1.END_DATE) or
(t2.END_DATE between t1.START_DATE and t1.END_DATE) )
)
PS,我显然已经重命名了列,所以请不要评论我的命名:)
有没有更有效的方法来做到这一点?
PPS。 START_DATE 和 END_DATE 是 TIMESTAMPS
如果以下两个条件都为真,则两个时间段重叠:
- 第一个在第二个结束之前开始。
- 第一部结束,第二部开始。
我会将查询写成:
delete from MYTABLE t1
where t1.DELETABLEFLAG = 'Y' and
exists (select 1
from MYTABLE t2
where t2.MATCHCOLUMN = t1.MATCHCOLUMN AND
t2.DELETABLEFLAG <> 'Y' AND
t1.START_DATE <= t2.END_DATE AND
t1.END_DATE >= t2.START_DATE
);
也许这会有所帮助。
与其他问题类似,但不同....
我有多个记录,并且标记了如果它们与其他记录有任何重叠(未标记为删除)则可能被删除的记录。我希望能够在 5+ 百万行 table.
上高效地执行此操作这是我所拥有的...但它不起作用(没有找到我手动放入以进行测试的重复项)
delete from MYTABLE t1
where t1.DELETABLEFLAG = 'Y' and
exists
(select 1
from
MYTABLE t2
where
t2.MATCHCOLUMN = t1.MATCHCOLUMN
and t2.DELETABLEFLAG <>'Y'
and
((t1.START_DATE between t2.START_DATE and t2.END_DATE) or
(t1.END_DATE between t2.START_DATE and t2.END_DATE) or
(t2.START_DATE between t1.START_DATE and t1.END_DATE) or
(t2.END_DATE between t1.START_DATE and t1.END_DATE) )
)
PS,我显然已经重命名了列,所以请不要评论我的命名:)
有没有更有效的方法来做到这一点?
PPS。 START_DATE 和 END_DATE 是 TIMESTAMPS
如果以下两个条件都为真,则两个时间段重叠:
- 第一个在第二个结束之前开始。
- 第一部结束,第二部开始。
我会将查询写成:
delete from MYTABLE t1
where t1.DELETABLEFLAG = 'Y' and
exists (select 1
from MYTABLE t2
where t2.MATCHCOLUMN = t1.MATCHCOLUMN AND
t2.DELETABLEFLAG <> 'Y' AND
t1.START_DATE <= t2.END_DATE AND
t1.END_DATE >= t2.START_DATE
);
也许这会有所帮助。