我創造了這個SQL,以便找到那些沒有下令X天的客戶的客戶。優化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子查詢的正確性。
>你們可以發現這個SQL有任何潛在的問題嗎?也許,但個人而言,我寧願從頭開始使用一組適當的DDL(和/或一個sqlfiddle)與預期的結果一起。 – Strawberry