【发布时间】:2017-09-06 05:51:12
【问题描述】:
我有两个表,我正在尝试为正在经历流程的客户加入。所有客户都进入了第一步,但只有一些进展到了第二步(表 2)。 客户可能会在不同的时间多次启动此过程,并且可能会在一个月、一个月或几个月内进入第二步。我想知道有多少人取得了这种进展。 以表格为例:
表_1
Cust1 1-Jan
Cust2 10-Jan
Cust3 15-Jan
Cust1 2-Feb
表_2
Cust1 5-Jan
Cust2 16-jan
我返回结果的查询是:
SELECT t1.Cust, t1.Date1, t2.Date2
FROM Table_1 t1
LEFT JOIN Table_2 t2 ON t1.Cust = t2.Cust
WHERE t2.Date is missing OR (t2.Date - t1.Date > 0 AND t2.Date - t1.Date < 10);
这会返回:
Cust1 1-Jan 5-Jan
Cust2 10-Jan 16-Jan
Cust3 15-Jan
当我希望查询返回时:
Cust1 1-Jan 5-Jan
Cust1 2-Feb
Cust2 10-Jan 16-Jan
Cust3 15-Jan
该查询似乎将 Cust1 与 2 月 2 日和 5 月 5 日联合起来,然后将其消除,因为它与过滤器不匹配。但我需要过滤器,因为 Cust1 在三月份回来。如何在最终输出中保留这个 2 月条目?帮助!
【问题讨论】:
-
您使用的是哪个 dbms?
-
你应该将 where 条件放入 join:
LEFT JOIN Table_2 t2 ON t1.Cust = t2.Cust and (t2.Date is missing OR (t2.Date - t1.Date > 0 AND t2.Date - t1.Date < 10)) -
你的日期列数据类型是什么
-
日期列只是一个日期列,为了实用,这里简化了。 DBMS 实际上是 SAS EG 中的 Proc SQL,但对于任何 SQL 都应该是相同的。