2011-09-19 74 views
1

我想删除一些与时间有关的冲突日期,这是一个开始时间和停止时间的表,我想写一个查询来删除重叠数据,在这种情况下,我会想要删除13:00行和13:30行(第6/7行),因为那些时间已经覆盖了12:0014:00行(第3/4行)。 VALUE_ENUM为1的所有行是开始时间,并且VALUE_ENUM为0的所有行都是停止时间。删除重叠时间的行

这里是什么在我的表中的数据看起来像一个例子:

SITE_ID ------- DEV_ID ------- SCHEDULE_TIME ------- VALUE_ENUM 
--------------------------------------------------------------- 
1    3000   09:30:00    1 
1    3000   11:30:00    0 
1    3000   12:00:00    1 
1    3000   14:00:00    0 
1    3000   13:00:00    1 
1    3000   13:30:00    0 
1    3000   16:30:00    1 
1    3000   18:30:00    0 
+0

如果您通过schedule_time命令查询,两个连续的value_enum值是否表示重叠? – Philip

+0

@Philip是的,他们会表明重叠 – Beef

+1

你如何订购你的行?我的意思是,你怎么知道14:00在13点之前到来? –

回答

0

感谢您的帮助,但我可以通过特定系统的先前时间设置为临时变量来解决的答案,然后做下一个时代的对比,看看他们的临时倍之间降临了,如果他们这么做我只是完全跳过插入,再次感谢您的意见和建议。

0

看来要删除行时其schedule_time小于上一行。但你如何订购行?有另一列吗?否则,一旦你删除下一个插入将主要可能在该位置,并在下一次你最终会错误地删除大量的行。

不知道如何能在一个单独的SQL语句来完成,但程序的算法很简单 - 初始化last_schedule_time为空,然后在每一行比较;如果更少,则删除或将last_schedule_time分配给当前。

+0

我实际上有2个问题发布了关于这个另一个更详细,所以我发布了一个更简单的版本,看看我会得到更好的帮助,这里是另一个版本http://stackoverflow.com/questions/7474411/delete-rows-with-conflicting-times-using-jdbc-odbc – Beef

+1

同意。从我的角度来看,我可以说,第1行和最后一行之间的所有行应该被删除,因为它们是重叠的。必须有一些他忘记提及的标准。 – Kent

+0

它们并不是全部重叠,但对于这个特定的系统,它应该从'9:30到11:30'开始,然后关闭,然后从'12:00到14:00'重新开始,然后关闭,然后再次开启“16:30-18:30”然后再次关闭 – Beef