2016-09-15 109 views
0

我有下面的表结构,过滤器根据日期范围内的一些记录

跨表:

Trans_Id(PK)  User_Id(FK)  Arroved_Date 
________________________________________________ 
1     101    05-06-2016 
2     101    12-06-2016 
3     101    20-06-2016 
4     102    06-06-2016 
5     103    10-06-2016 
6     103    25-06-2016 

表2:

Id(Pk)   User_Id(Fk)  Start_Date End_Date  Is_Revoked 
_________________________________________________________________________ 
1     101    01-06-2016 15-06-2016  1 
2     101    10-06-2016 15-06-2016  0 
3     103    05-06-2016 20-06-2016  0 

我想筛选出交易,如果Approved_Date不在Table2的用户Start_Date和End_Date之间。

If is_revoked = 1 then it should not consider. 

预期结果:

Trans_Id 
________ 
1 
3 
4 
6 
+0

为什么transid 2没有显示在输出中?对于transid 1和2,你有userid 101,并且在加入时必须选择两者还是两者都必须被拒绝? –

+0

,因为Trans_id 2在6月12日获得批准。在表2中开始日期和结束日期是10-06-2016至15-06-2016。由于批准日期是12日,因此应该进行过滤。 – Srinivasan

+0

abt trans 4,102用户标识符与table2不匹配? –

回答

0

试试这个

SELECT A.Trans_ID 
FROM TransTable A JOIN Table2 B 
ON (A.User_Id = B.User_Id) 
WHERE B.Is_Revoked = 1 OR A.Approved_Date NOT BETWEEN B.Start_Date AND B.End_Date 
0

这样就解决了你,

SELECT Trans_Id FROM TRANS AS A JOIN TABLE2 AS B ON A.[USER_ID]=B.[USER_ID] 
WHERE B.IS_REVOKED=0 AND ARROVED_DATE NOT BETWEEN B.START_DATE AND B.END_DATE 
0

基本上有两种情况你 想见。

  1. 如果is_revoked等于1,则忽略结果的行..
  2. 如果Approved_Datestart_dateend_date之间然后不考虑当时还从结果中忽略这一点。

所以这可以很容易地使用连接完成。

SELECT A.Trans_ID 
FROM TransTable A, Table2 B 
WHERE B.Is_Revoked != 1 AND A.Approved_Date NOT BETWEEN B.Start_Date AND 
B.End_Date 

据我所知,您提到的预期结果。你真的不'在乎User_id是否匹配。