我创建了这个 SQL 来查找 X 天没有订购的客户。
它正在返回一个结果集,所以这篇文章主要是为了获得第二意见,以及可能的优化。
SELECT o.order_id,
o.order_status,
o.order_created,
o.user_id,
i.identity_firstname,
i.identity_email,
(SELECT COUNT(*)
FROM orders o2
WHERE o2.user_id=o.user_id
AND o2.order_status=1) AS order_count,
(SELECT o4.order_created
FROM orders o4
WHERE o4.user_id=o.user_id
AND o4.order_status=1
ORDER BY o4.order_created DESC LIMIT 1) AS last_order
FROM orders o
INNER JOIN user_identities ui ON o.user_id=ui.user_id
INNER JOIN identities i ON ui.identity_id=i.identity_id
AND i.identity_email!=''
INNER JOIN subscribers s ON i.identity_id=s.identity_id
AND s.subscriber_status=1
AND s.subsriber_type=e
AND s.subscription_id=1
WHERE DATE(o.order_created) = "2013-12-14"
AND o.order_status=1
AND o.user_id NOT IN
(SELECT o3.user_id
FROM orders o3
WHERE o3.user_id=o.user_id
AND o3.order_status=1
AND DATE(o3.order_created) > "2013-12-14")
你们能找到这个 SQL 的任何潜在问题吗?日期是动态插入的。
我投入生产的最终 SQL 基本上只包括 o.order_id、i.identity_id 和 o.order_count - 这个 order_count 需要是正确的。其他选定的字段和“last_order”子查询将不包括在内,仅用于测试。
这应该给我一个用户列表,这些用户在特定日期有最后一个订单,并且是时事通讯订阅者。我特别怀疑 WHERE 子句中 NOT IN 部分和 order_count 子查询的正确性。