我在 Oracle 中有一组日期值,我正在ORDER BY START_TIME, STOP_TIME
按照下面的数据示例进行操作。如您所见,标记为 NEXT_START_TIME 的列是通过 LEAD() 函数检索的。
START_TIME STOP_TIME NEXT_START_TIME 2013 年 6 月 13 日 5:19 2013 年 6 月 13 日 5:34 2013 年 6 月 13 日 5:19 -- 没有延迟,好的 2013 年 6 月 13日 5:19 2013 年 6 月 13日 6:23 2013 年 6 月 13 日 5:39 2013 年 6 月 13 日 5:39 2013 年 6 月 13 日 6:04 2013 年 6 月 13 日 6:23 -- 延迟?错误的 2013 年 6 月 13 日 6:23 2013 年 6 月 13 日 7:32 2013 年 6 月 13 日 9:18 2013 年 6 月 13 日 9:18 2013 年 6 月 13 日 9:50 2013 年 6 月 13 日 9:44 2013 年 6 月 13 日 9:44 2013 年 6 月 13 日 10:01
该数据代表分配的作业。我面临的困难任务是,以最有效的方式,如何确定分配工作是否有任何延误。第一个条目表示没有延迟,因为 NEXT_START_TIME 比 STOP_TIME 早。只有在 NEXT_START_TIME 出现在 STOP_TIME之后的情况下,我们才能认为存在延迟(如第三行所示)。
皱纹是,即使第三行似乎表明延迟,它也不正确。即使 NEXT_START_TIME 是 6:23,它也需要知道之前的工作仍在进行中(参见两个突出显示的项目)。
有没有办法在没有 O(N) 或更糟的迭代的情况下实现这一点?现在使用 LEAD() 函数非常有效。
如果需要,请要求澄清,因为我意识到这可能难以理解。