根据日期范围过滤一些记录

时间:2016-09-15 10:10:14

标签: sql-server

我有以下表结构,

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

3 个答案:

答案 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)

你基本上有两种情况需要满足。

  1. 如果is_revoked等于1,则忽略结果中的行..
  2. 如果Approved_Date介于start_dateend_date之间,则不要考虑,然后也会忽略结果。
  3. 所以这可以通过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是否匹配。