【发布时间】:2016-06-01 16:04:19
【问题描述】:
这是我的第一篇文章,提前感谢您的耐心等待,并感谢大家参与 Stack,我已经用它来学习了!如果之前回答过这个问题,请原谅,我已尽力寻找替代解决方案。所以我有两个表,一个 orders 表和一个 customer_history 表(这是用这些表相同格式编写的假数据)。
订单
orders_id customers_id date_purchased order_total
12341 12 2016-05-15 00:00:01 24.50
12342 13 2016-06-01 00:00:01 29.99
12343 12 2016-06-01 00:00:01 18.50
customers_history
id customers_id created_at agent_name contact_type
1 12 2016-05-31 00:00:01 William Phone Call
2 12 2016-05-29 00:00:01 Kyle Email
3 13 2016-05-17 00:00:01 William Phone Call
4 13 2016-05-28 00:00:01 William Email
5 12 2016-05-11 00:00:01 Kyle Email
6 12 2016-05-12 00:00:01 Kyle Email
5 12 2016-05-13 00:00:01 William Phone Call
我们正在尝试为订单制作一张报告卡,以查看客户是否在代理联系后的 7 天内下订单。所以我想要返回的是:
orders_id customers_id date_purchased order_total agent_name phone_count email_count
12341 12 2016-05-15 00:00:01 24.50 Kyle 0 2
12341 12 2016-05-15 00:00:01 24.50 William 1 0
12342 13 2016-06-01 00:00:01 29.99 William 0 1
12343 12 2016-06-01 00:00:01 18.50 William 1 0
12343 12 2016-06-01 00:00:01 18.50 Kyle 0 1
到目前为止,我已经为我的选择查询得到了这个,但它没有返回我正在寻找的结果:
SELECT
oc.orders_id,
oc.customers_id,
oc.date_purchased,
oc.order_total,
SUM(CASE WHEN (ch.contact_type = "Phone Call" AND ch.created_at <= oc.date_purchased AND ch.created_at > (oc.date_purchased - INTERVAL 7 DAY)) THEN 1 ELSE 0 END) AS phone_count,
SUM(CASE WHEN (ch.contact_type = "Email" AND ch.created_at <= oc.date_purchased AND ch.created_at > (oc.date_purchased - INTERVAL 7 DAY)) THEN 1 ELSE 0 END) AS email_count
FROM orders oc
LEFT JOIN customers_history ch
ON ch.customers_id = oc.customers_id
WHERE ch.agent_name != NULL
非常感谢任何帮助!
【问题讨论】: