左连接在具有日期范围的同一个表上

时间:2015-11-25 20:42:27

标签: sql left-join self-join

我已经找到了这个解决方案,但没有一个与我的特定问题相匹配。

我正在查看服务台数据,并希望识别那些在28天内(事件发生前14天或发生后+14天)内就同一问题致电的客户。

尝试计算分辨率和首次呼叫解决方案。我正在使用一张我自己加入的桌子。

以下是数据样本:

CustID | TICKET |Code       |Date
01     | 001    |Benefits   |11/01/2015
01     | 001    |Transport  |11/01/2015
01     | 009    |Benefits   |11/13/2015
01     | 010    |Claims     |11/14/2015
01     | 010    |Transport  |11/30/2015
02     | 010    |Benefits   |11/30/2015

然后,我想要的最终结果是所有原始值,并将符合同一客户标准的所有其他行附加到同一个问题,但仅包括在事件发生日期之前或之后发生的那些实例:

CustID | TICKET |Code     |Date      |CustID2 |Ticket2|Code2   |Date2
01     | 001    |Benefits |11/01/2015|01      |009    |Benefits|11/13/2015
01     | 001    |Transport|11/01/2015|NULL    |NULL   |NULL    |NULL
01     | 009    |Benefits |11/13/2015|01      |001    |Benefits|11/01/2015
01     | 010    |Claims   |11/14/2015|NULL    |NULL   |NULL    |NULL
01     | 001    |Transport|11/30/2015|NULL    |NULL   |NULL    |NULL
02     | 010    |Benefits |11/30/2015|NULL    |NULL   |NULL    |NULL

我尝试使用左连接,但由于数据范围,最终结果类似于内连接。

SELECT 
T1.CustID, 
T1.TICKET, 
T1.Code, 
T1.Date, 
T2.CustID AS CustID2, 
T2.TICKET As Ticket2, 
T2.Code As Code2, 
T2.Date AS Date2

FROM TABLE AS T1 
LEFT JOIN TABLE AS T2 
ON T1.CustID = T2.CustID AND T1.Code = T2.Code 
WHERE 
T1.TICKET <> T2.TICKET
AND T2.Date Between T1.Date-14 
AND T1.Date+14

我想我可能不得不这样做两个查询但是虽然我可以得到符合我标准的所有结果,但我无法得到那些不匹配的结果。

1 个答案:

答案 0 :(得分:1)

是的,您正在创建隐式INNER JOIN,因为您在WHERE子句中不允许UNBUILD中的字段为NULL,并且它们将归功于LEFT JOIN。

你可以这样做:

if($check_password == $row['password']) { 
$login_ok = true; 
} 

或者这个:

T2