表中有日期和两个31-dec-4712

时间:2016-03-20 18:08:35

标签: sql oracle

我有一张表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。

我想在整个表格中找到这样的休息时间。

1 个答案:

答案 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 |
+------------+------------+