2016-03-20 16 views
0

私は今、このレコードでは、従業員050498のための31 - 12月 - 12との中断を持つ二つの日付があるテーブルtab_assignment_xx表と2 31 - 12月 - 4712

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 

を持っています日付。たとえば、01-Jan-16より前には、31-dec-12ではなく31-dec-2015だったはずです。

私はテーブル全体でそのような休憩を見つけたいと思っています。

答えて

1

は、私は今、手元に何のオラクルを持っていないが、これは、ジョブ実行する必要があります。

をなし、「次」の行を持っているすべての行を検索しますが、次の行を持っていないコースの最後の行を(除くthatsの理由たぶん、あなたはあなたの日付にTRUNC()を追加する必要があります))

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); 

- 時間を無視するように列の種類によって異なり、それが最後です。

実測行:

+------------+------------+ 
| date_from | date_end | 
+------------+------------+ 
| 2015-11-16 | 4712-12-31 | 
+------------+------------+ 
関連する問題