我需要找到客户被认为是"高级客户"时没有发生的客户交易。在此示例中,sql检索第2行。如何避免检索任何记录,因为此客户在第1行中引用的购买日期是溢价。
SELECT
FROM TblPremCus c INNER JOIN tblTrans t ON c.CustomerID = t.CustomerID
WHERE t.PurchaseDate NOT BETWEEN c.StartDate AND c.EndDate
数据:
**tblPremCus**
ROWID CustomerID StartDate EndDate
1 ABC123 1/1/2016 6/16/2016
2 ABC123 9/3/2016 12/21/9999
**tblTrans**
TransID CustomerID PurchaseDate
T1 ABC123 6/1/16
预期结果:无
答案 0 :(得分:0)
我的理解是,您希望获得交易日期不属于客户“溢价”日期之间的所有交易。
在这样的情况下,更容易找到属于这些范围之一的交易,并且与您开始时的更改很简单:
SELECT * FROM TblPremCus c
INNER JOIN tblTrans t ON c.CustomerID = t.CustomerID
WHERE t.PurchaseDate BETWEEN c.StartDate AND c.EndDate
我们已经看到使用NOT BETWEEN
不足以清除不需要的交易,但现在我们知道我们不想要哪些交易,我们可以找到我们做的事情:简单地说,以上查询未返回的任何内容。
SELECT * from TblTrans
WHERE TransID NOT IN (SELECT TransID FROM TblPremCus c
INNER JOIN tblTrans t ON c.CustomerID = t.CustomerID
WHERE t.PurchaseDate BETWEEN c.StartDate AND c.EndDate)