SQL提取列表,其中实例位于多个不同的日期窗口之外

时间:2014-04-07 23:40:46

标签: sql sql-server-2012

原谅格式化的"表" - 不确定如何添加一个。我有两张桌子。交易表:

 **Member**--**Service Date**- **Order Number**
    - 1 ----- 1/15/2013 -----   651
    - 2 ----- 2/2/2013 -----    258
    - 1 ----- 9/15/2013 -----   113
    - 1 ----- 11/1/2013 -----   728
    - 2 ----- 3/3/2013 -----    309
    - 3 ----- 1/1/2013 -----    739
    - 4 ----- 11/30/2013 -----  226
    - 3 ----- 7/6/2013 -----    978
    - 3 ----- 8/7/2013 -----    266
    - 4 -----  4/1/2013 -----   198
    - 4 ----- 12/1/2013 -----   611

一个资格表,每个成员有多个日期范围:

**Member**--**Elig. Begin**--**Elig. End**
    - 1 ----  1/1/2013 ---- 5/31/2013
    - 1 ----  8/1/2013 ---- 10/31/2013
    - 2 ---- 3/1/2013 ----  6/30/2013
    - 2 ---- 7/1/2013 ----  12/31/2013
    - 3 ---- 1/1/2013 ----  7/31/2013
    - 3 ---- 9/1/2013 ----  12/31/9999
    - 4 ---- 11/1/2013 ---- 12/31/9999

我的目标是返回那些在不同资格范围之外处理订单的情况,因为每个成员的范围会发生多次变化/发生,每个成员有多个订单,我很难过。上面表格中我想要的输出是:

**Member**--**Service Date**--**Order Number*
    - 2 ---- 2/2/2013 ----  258
    - 1 ---- 11/1/2013 ---- 728
    - 3 ---- 8/7/2013 ----  266
    - 4 ---- 4/1/2013 ----  198

非常感谢任何帮助。非常感谢你们。

最佳,

1 个答案:

答案 0 :(得分:0)

有不同的方法,但似乎更容易遵循的方法是使用EXISTS,像这样

SELECT Member, [Service Date], [Order Number]
FROM [transaction table] as tt
WHERE NOT EXISTS(
    SELECT * 
    FROM [eligibility table] as et 
    WHERE tt.Member=et.Member and tt.[Service Date] BETWEEN et.[Elig Begin] and et.[Elig End])