删除 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
      );

也许这会有所帮助。