2016-08-21 66 views
0

我有两个表格。 1表看起来像下面如何根据日期加入2个表格

session_start_dt | package_key 
------------------------------------------- 
    01-01-2015  | 202 
    01-02-2015  | 203 
    01-14-2016  | 204 
    12-01-2015  | 206 
    03-02-2015  | 204 
    04-14-2016  | 202 

第二表看起来像下面

package_key  | term_start_date | term_end_date | Active | event 
202    | 01-01-2014   | 01-01-2015  | Y  | NS 
202    | 01-01-2014   | 01-01-2015  | Y  | CAN 
203    | 01-02-2015   | 01-02-2016  | N  | NS 
204    | 01-02-2015   | 01-02-2016  | N  | NS 
206    | 01-02-2015   | 01-02-2016  | N  | NS 
206    | 01-01-2014   | 01-01-2015  | Y  | NS 

我需要从第一个表中获取所有记录,并得到,如果他是主动或不从第二表时, session_start_dt落在第二个表的term_start_date和term_end_date之间。

session_start_dt | package_key | Active 
------------------------------------------- 
01-01-2015  | 202   | Y 
01-02-2015  | 203   | N 
01-14-2016  | 204   | null 
12-01-2015  | 206   | N 
03-02-2015  | 204   | N 
04-14-2016  | 202   | null 

我写的查询关键词,比如

select package_key, session_start_dt from table a, table b 
where SESSION_START_Dt BETWEEN TERM_START_DATE AND TERM_END_DATE AND 
PACKAGE_KEY = PACKAGE_KEY and event not in ('CAN') 

,它不是得到所要的结果。

回答

1

您可以使用between作为join的条件。我认为这是你想要的逻辑:

select t1.*, t2.active 
from table1 t1 left join 
    table2 t2 
    on t1.package_key = t2.package_key and 
     t1.session_start_dt between t2.term_start_date and t2.term_end_date; 
+0

@ Gordon Linoff - 我们如何用(+)运算符编写相同的查询? – beckham

+2

@ beckham。 。 。你不应该那样做。使用显式外部连接语法。并且尽量忘记你们每个人学到了像(+)这样的东西。 –

+0

缺少:'和事件不在('CAN')中 - 顺便说一句'和event!='CAN''。 – mathguy