我有一张这样的桌子:
Id Begin_Date End_date
1 01-JAN-12 05-JAN-12
1 01-FEB-12 01-MAR-12
1 15-FEB-12 05-MAR-12
对于给定的 ID,它给出了一组日期范围。假设如果日期介于该 ID 的开始日期和结束日期之间,则该 ID 为“on”。否则,“关闭”
这里的问题是最后两行——日期范围重叠并相互矛盾。第二行声称 1 在 01-FEB-12 和 01-MAR-123 之间“开启”,但第三行声称 1 在 2012 年 2 月 14 日之前关闭。同样,第二行声称 1 在 2012 年 3 月 2 日关闭,但第 3 行声称它已打开。
我想应用的和解逻辑是,在出现矛盾的情况下,选择最早的开始日期和之后的最早的结束日期。因此,结果将是:
Id Begin_Date End_date
1 01-JAN-12 05-JAN-12
1 01-FEB-12 01-MAR-12
我能够使用滞后分析功能来解决这个问题,但我在其他用例中遇到了困难。取这个输入数据集。
Id Begin_Date End_date
1 01-JAN-12 10-JAN-12
1 5-JAN-12 8-JAN-12
1 12-JAN-12 15-JAN-12
1 1-JAN-12 14-JAN-12
我在这里期望的输出是:
Id Begin_Date End_date
1 01-JAN-12 8-JAN-12
1 01-JAN-12 14-JAN-12
...因为第一行是最早的开始日期,而其结束日期是之后最早的结束日期。下一行是上一个结束日期之后的最早开始日期,该行的结束日期是之后最早的结束日期。12 年 1 月 14 日之后没有开始日期,所以我完成了。
我解决这个问题的运气很差。我尝试的一种方法是按 id 划分排名并将其与最大排名进行比较。然后我使用滞后函数与之前的排名进行比较。但是,对于上述用例,此策略完全失败。
有什么建议么?