0

我有一个数据库,其中包含多个表来跟踪客户以及我们与他们的交互等等。我正在使用 PHP 创建一个报告,该报告应显示所有处于打开状态且在过去 2 周内没有记录交互的客户。我试图做一个查询,然后在处理这些结果时,它会基于它运行另一个查询,但它非常慢,我无法让它正常工作。我认为 JOIN 函数是我的答案,但我不完全确定如何实现它。

我的表有这些字段:

customers: customer_id
customers_marketing_options: customer_id, status
customer_interactions: customer_id, created_on (yyyy-mm-dd hh:mm:ss)

现在,我让它选择所有处于开放状态的客户。然后根据这些结果,我选择与该客户 ID 的所有交互,created_on 最多在 2 周前,按 created_on 日期对其进行排序并选择第一行(最近的交互)。但是,这会返回具有温暖状态的客户的交互。但是,它不会检查他们在过去 2 周内是否有互动。

这可能听起来令人困惑,但是任何帮助或指导将不胜感激。

4

3 回答 3

1
SELECT cmo.customer_id,
       Max(ci.created_on) as last_interaction
FROM customer_marketing_options cmo
     inner join customer_interactions ci
     on cmo.customer_id = ci.customer_id
WHERE
  cmo.status = 'open'
GROUP By
  cmo.customer_id
HAVING Max(ci.created_on) < DATE_SUB(CURDATE(),INTERVAL 14 DAY)
于 2012-11-15T19:49:30.177 回答
1
SELECT customer_ID, created_on
FROM customer_interactions
WHERE MAX(created_on) <= (now() - INTERVAL 2 week)
  AND ... status stuff ...
GROUP BY customer_ID
于 2012-11-15T19:50:00.440 回答
0

试试这个:

SELECT ci.customer_id, ci.created_on FROM customer_interactions ci
LEFT JOIN customer_interactions ci2
  ON (ci.customer_id = ci2.customer_id AND ci.created_on < ci2.created_on)
JOIN customers_marketing_options cmo
  ON (ci.customer_id = cmo.customer_id AND status = 'Open')
WHERE ci2.created_on IS NULL AND ci.created_on < now() - interval 2 week

在此处查看工作示例。

于 2012-11-15T20:02:52.790 回答