选择白天和End_date之间的日期

时间:2017-04-09 19:10:25

标签: sql oracle oracle11g

我有以下数据:

表1:

Code   code_id   day
F23    123df     16 Jul 2016
F23    123df     17 Jul 2016
F23    123df     18 Jul 2016
F23    123df     19 Jul 2016
F23    123df     20 Jul 2016
F24    124df     16 Jul 2016
F24    124df     17 Jul 2016
F24    124df     18 Jul 2016
F24    124df     19 Jul 2016
F24    124df     20 Jul 2016

表2:

Code   code_id   status     daytime                 End_date
F23    123df     down      16 Jul 2016 06:00 am    18 Jul 2016 08:00 pm
F23    123df     down      19 Jul 2016 05:00 am    21 Jul 2016 03:45 pm
F23    123df     down      23 Jul 2016 02:40 am

我需要从table1中选择数据,其中白天不在day2和end_date之间,如果是table1天(例如' 2016年7月16日'是同一天' 2016年7月16日06 :00'来自table2)就像是从daytime或End_date字段开始的table2天,然后它仍然需要选择当天的数据。如果End_date为null,那么它必须是sysdate - nvl(End_date,sysdate)。

例如,选择日期=' 2016年7月16日'从table1开始,它必须是:

F23    123df     16 Jul 2016
F24    124df     16 Jul 2016

但是当选择2016年7月17日'然后它必须是:

F24    124df     17 Jul 2016

选择' 2016年7月18日'它必须是:

F23    123df     18 Jul 2016
F24    124df     18 Jul 2016

感谢, 小号

1 个答案:

答案 0 :(得分:0)

SELECT *
FROM   table1 t
WHERE  NOT EXISTS (
         SELECT 1
         FROM   table2 x
         WHERE  t.code                          =  x.code
         AND    t.code_id                       =  x.code_id
         AND    t.day                           >= x.daytime
         AND    t.day + INTERVAL '86399' SECOND <= x.end_date
       );