SQL:选择过去两周内没有条目的客户

时间:2012-11-15 19:41:09

标签: php mysql join

我有一个数据库,它有多个表来跟踪客户以及我们与他们的互动等等。我正在使用PHP创建一个报告,该报告应该显示所有具有开放状态并且在两周内没有记录交互的客户。我试图进行查询,然后在处理这些结果时,它会根据它运行另一个查询,但它非常慢,我无法让它正常工作。我认为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日期排序并选择顶行(最近的交互)。但是,它会返回具有暖状态的客户的交互。但是,它不会检查过去两周内是否有互动。

这可能听起来令人困惑,但任何帮助或指导都会受到赞赏。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

SELECT customer_ID, created_on
FROM customer_interactions
WHERE MAX(created_on) <= (now() - INTERVAL 2 week)
  AND ... status stuff ...
GROUP BY customer_ID

答案 2 :(得分: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

检查工作示例here