服务日期是否属于会员日期范围

时间:2018-06-10 19:56:52

标签: sql-server

我有两个表,一个是customer_service表,其中包含服务日期,另一个是成员资格表,如果成员的成员资格有效和失效日期已经失效,那么成员可以多次存在。下面是这些表格如何布局的基本示例。

我如何找到不在会员日期范围之间或之间的服务日期。由于成员可能在相同ID下拥有其成员资格的多个日期范围,因此简单连接将无法使用此功能。这需要某种形式的迭代吗?我不确定处理这类问题的最佳方法。

Customer_Service表

static

会员表

id | customers   | Dos
-------------------------
 1 | Rodney      | 01/18/2018
 2 | Jim         | 02/15/2018
 3 | Tom         | 01/01/2018
 1 | Rodney      | 02/15/2018
 3 | Tom         | 03/01/2018

1 个答案:

答案 0 :(得分:2)

下面是一个简单的方法。该查询将识别CUSTOMER_SERVICE中的行,其中DOS不属于该客户的成员资格表中的任何期间。

SELECT * FROM CUSTOMER_SERVICE CS
WHERE NOT EXISTS (
    SELECT * FROM MEMBERSHIP M
    WHERE CS.ID = M.ID
       AND DOS BETWEEN EFFECTIVE_DATE AND END_DATE
)

或者:

 SELECT CS.* FROM CUSTOMER_SERVICE CS
 LEFT JOIN MEMBERSHIP M ON M.ID = CS.ID 
      AND DOS BETWEEN EFFECTIVE_DATE AND END_DATE
 WHERE M.ID IS NULL