我有两个表,一个是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
答案 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