我正在尝试删除与时间相关的一些冲突日期,这是一个开始时间和停止时间的表,我想写一个查询来删除重叠数据,在这种情况下我想要删除13:00
行和13:30
行(第6/7行)因为那些时间已经被12:00
覆盖到14: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
当它的schedule_time
小于前一行时,似乎你想要删除一行。但是你如何订购行?还有另一栏吗?否则,一旦删除,下一次插入很可能就在那个位置,下次你最终会错误地删除很多行。
不知道如何在单个sql语句中完成此操作,但程序算法很简单 - 将last_schedule_time初始化为null然后在每行比较中;如果更少则删除或将last_schedule_time分配给当前。
感谢您的帮助,但我能够通过将特定系统的先前时间设置为临时变量来解决问题,然后与下一次进行比较以查看它们是否落在临时时间之间,如果它们确实存在,我只是跳过了完全插入,再次感谢您的意见和建议。