这项工作是将以下查询的功能转换为可以快速执行的功能,因为我们当前的逻辑远远不够慢(总运行时间超过24小时)。请注意,相应的列已被索引。
我们的表的大小如下; 表1-300,000行 表2-15,000行
此查询根据电话号码uid以及最接近的进行日期来匹配两个表之间的电话呼叫日期。第一个表(电话表1)是对外营销电话,而第二个表(电话表2)中的电话包含相同的电话号码,但在入站电话的范围内营销活动。该逻辑根据相应的时间和UID将最近的出站电话与入站电话表进行匹配
查询如下;
SELECT `Phone Number 2`, `Time of Call` FROM `Phone Call Table 2`
JOIN
`Phone Call Table 1`
ON `Phone Call Table 1`.`Phone_Call_Start_1` =
(SELECT MAX(`Phone_Call_Start_1`)
FROM `Phone Call Table 1`
WHERE `Phone_Call_Start_1` < `Phone Call Table
2`.`Phone_Call_Start_2`
AND `Phone Number 1` = `Phone Number 2`
) ;
答案 0 :(得分:0)
请尝试以下SQL:
select aa.`Phone Number 2`, aa.`Time of Call`, max(bb.`Phone_Call_Start_1`) as lateststart
from `Phone Call Table 2` aa
inner join `Phone Call Table 1` bb on aa.`Phone Number 2` = bb.`Phone Number 1`
and bb.`Phone_Call_Start_1` < aa.`Phone_Call_Start_2`
group by aa.`Phone Number 2`, aa.`Time of Call`