我有一张表tab_assignment_xx
date_from date_end action person_number
01-Apr-2014 31-Jul-2014 HIRE 050498
01-Aug-2014 31-Jan-2015 OTHERS 050498
01-Feb-2015 30-Jun-2015 OTHERS 050498
01-Jul-2015 15-Nov-2015 OTHERS 050498
16-Nov-2015 **31-Dec-4712** OTHERS 050498
01-Jan-2016 **31-Dec-4712** OTHERS 050498
现在在员工050498的这个记录中有两个日期,31-dec-12和日期中断。例如,在01年1月1日之前,它应该是2015年12月31日,而不是31-dec-12。
我想在整个表格中找到这样的休息时间。
答案 0 :(得分:1)
我现在手头没有甲骨文,但这应该可以胜任:
查找没有"以下"的所有行行但排除最后一行,当然没有后续行(这就是为什么它是最后一行;)
select *
from tab_assignment_xx a
where not exists (select 1
from tab_assignment_xx b
where a.date_end + 1 = b.date_from
and a.person_number = b.person_number)
and a.date_from != (select max(date_from)
from tab_assignment_xx c
where a.person_number = c.person_number);
也许您需要在日期中添加TRUNC() - 取决于要忽略时间的列类型。
找到行:
+------------+------------+
| date_from | date_end |
+------------+------------+
| 2015-11-16 | 4712-12-31 |
+------------+------------+