[英]Avoid using CROSS JOIN on my SQL query (too heavy)
我正在處理 SQL 查詢以定義客戶類型,目標是區分老活躍客戶和流失客戶(流失 = 在特定時間范圍內停止使用貴公司產品或服務的客戶)
為了做到這一點,我想出了這個完美的查詢:
WITH customers AS (
SELECT
DATE(ord.delivery_date) AS date,
ord.customer_id
FROM table_template AS ord
WHERE cancel_date IS NULL
AND order_type_id IN (1,3)
GROUP BY DATE(ord.delivery_date), ord.customer_id, ord.delivery_date),
days AS (SELECT DISTINCT date FROM customers),
recap AS (
SELECT * FROM (
SELECT
a1.date,
a2.customer_id,
MAX(a2.date) AS last_order,
DATE_DIFF(a1.date, MAX(a2.date), day) AS days_since_last,
MIN(a2.date) AS first_order,
DATE_DIFF(a1.date, MIN(a2.date), day) AS days_since_first
FROM days AS a1
CROSS JOIN customers AS a2 WHERE a2.date <= a1.date
GROUP BY a1.date, customer_id)
)
SELECT * FROM recap
這個查詢的唯一問題是計算量太大(它使用了大量的 CPU 秒數)我認為這是由於 CROSS JOIN。
我需要你們的一些幫助才能找到另一種方法來獲得相同的結果,一種不需要交叉連接就可以得到相同 output 的方法,你們認為這可能嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.