我有以下表结构,
Trans Table:
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 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:0)
你基本上有两种情况需要满足。
is_revoked
等于1,则忽略结果中的行.. Approved_Date
介于start_date
和end_date
之间,则不要考虑,然后也会忽略结果。所以这可以通过join来轻松完成。
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
是否匹配。