我正在嘗試獲取尚未訂購6個月或更長時間的客戶的列表。我有我在查詢中使用了4臺使用LEFT JOIN優化MySql查詢
- 帳戶(ACCOUNT_ID)
- 店(STORE_ID,ACCOUNT_ID)
- 客戶(STORE_ID,CUSTOMER_ID)
- 訂單(ORDER_ID,CUSTOMER_ID,STORE_ID)
客戶和訂單表格非常大,分別是3M和26M行,所以在我的查詢中使用左連接使查詢時間非常長。我相信我有索引我的表正確
這裏是我的查詢我用
SELECT cus.customer_id, MAX(o.order_date), cus.store_id, s.account_id, store_name
FROM customers cus
LEFT JOIN stores s ON s.store_id=cus.store_id
LEFT JOIN orders o ON o.customer_id=cus.customer_id AND o.store_id=cus.store_id
WHERE account_id=26 AND
(SELECT order_id
FROM orders o
WHERE o.customer_id=cus.customer_id
AND o.store_id=cus.store_id
AND o.order_date < CURRENT_DATE() - INTERVAL 6 MONTH
ORDER BY order_id DESC LIMIT 0,1) IS NOT NULL
GROUP BY cus.customer_id, cus.client_id;
我需要得到最後訂購日期,這就是爲什麼我加入了訂單表的原因,然而,由於客戶可以有多個訂單,它將返回多行客戶,這就是爲什麼我使用了group by子句。
如果任何人都可以幫助我的查詢。
請提供'SHOW CREATE TABLE'。 –
客戶是否在不同的store_id上最近購買了某件東西,這有沒有關係? (Ollie和我在這裏做了不同的假設。) –
感謝您的回覆。客戶不能有多個store_id。 –