的我有2個查詢,第一個查詢是列出所有的客戶誰從時間一開始就進行購買:Mysql的查詢數據子集的
SELECT o.id_customer, CONCAT(c.firstname, ' ', c.lastname) AS fullname, c.email, COUNT(o.id_customer) AS 'total'
FROM ps_orders AS o
LEFT JOIN ps_order_state_lang AS osl ON o.current_state = osl.id_order_state
LEFT JOIN ps_customer AS c ON o.id_customer = c.id_customer
WHERE o.current_state IN(2,4,5)
AND osl.id_lang = 2
AND o.invoice_date BETWEEN '2014-01-01' AND '2015-09-30'
GROUP BY o.id_customer
ORDER BY total DESC;
而第二個查詢是列出所有的客戶誰做在特定的時間段購買:在此基礎上
SELECT c.id_customer, CONCAT(c.firstname, ' ', c.lastname) AS fullname, COUNT(c.id_customer) AS total
FROM ps_orders AS o
LEFT JOIN ps_customer AS c ON o.id_customer = c.id_customer
WHERE o.invoice_date BETWEEN '2015-01-01' AND '2015-01-31'
AND o.current_state IN (2,4,5)
GROUP BY c.id_customer
ORDER BY total DESC;
,我怎麼能得到所有客戶誰僅僅基於第二查詢中指定的期間做了他們的第一次購買。我如何使用這兩個查詢來做到這一點?謝謝。
編輯#1
我目前的解決辦法是這樣的:
SELECT a.id_customer, a.fullname, a.total AS 'this_month', b.total AS 'all_time'
FROM (
SELECT c.id_customer, CONCAT(c.firstname, ' ', c.lastname) AS fullname, COUNT(c.id_customer) AS total
FROM ps_orders AS o
LEFT JOIN ps_customer AS c ON o.id_customer = c.id_customer
WHERE o.invoice_date BETWEEN '2015-01-01' AND '2015-01-31'
AND o.current_state IN (2,4,5)
GROUP BY c.id_customer
HAVING COUNT(c.id_customer) < 2
ORDER BY total DESC
) AS a
LEFT JOIN (
SELECT o.id_customer, CONCAT(c.firstname, ' ', c.lastname) AS fullname, c.email, COUNT(o.id_customer) AS 'total'
FROM ps_orders AS o
LEFT JOIN ps_order_state_lang AS osl ON o.current_state = osl.id_order_state
LEFT JOIN ps_customer AS c ON o.id_customer = c.id_customer
WHERE o.current_state IN(2,4,5)
AND osl.id_lang = 2
AND o.invoice_date BETWEEN '2013-12-31' AND '2015-01-01'
GROUP BY o.id_customer
HAVING COUNT(o.id_customer) < 2
ORDER BY total DESC
) AS b ON b.id_customer = a.id_customer
ORDER BY all_time DESC;
是有這樣做的更好的辦法?
編輯2:
首先查詢是誰在我們的商店從一開始的時候進行購買所有客戶的清單。
第二個查詢是所有僅在特定月份進行購買的客戶的列表。
根據這2條查詢,我想列出第一次在特定月份進行購買的所有客戶。
編輯#3: 也許我不是很清楚我想達到什麼,所以讓我詳細說明一下。
我有一個名爲ps_orders的表,它從一開始就存儲所有的事務記錄。從ps_orders我在下面列特別感興趣:
- id_customer
- id_order
- invoice_date
我想知道時間有多少首先從給定時間內的買家。例如:
我想知道有多少客戶是2015年1月1日和1月31日2015下面的查詢之間的首次置業列出了該確切日期間的所有訂單:
SELECT c.id_customer, CONCAT(c.firstname, ' ', c.lastname) AS fullname, COUNT(c.id_customer) AS total
FROM ps_orders AS o
LEFT JOIN ps_customer AS c ON o.id_customer = c.id_customer
WHERE o.invoice_date BETWEEN '2015-01-01' AND '2015-01-31'
AND o.current_state IN (2,4,5)
GROUP BY c.id_customer
ORDER BY total DESC;
如何有史以來結果包括在早日購買的客戶(例如,客戶編號1234可能在前一年購買)。不過,我只對第一時間買家感興趣。請參閱編輯#1,看我目前的解決方案(它包含了一些無效的數據,但我覺得我越來越接近我想要什麼)
無法理解的問題「的基礎上的第二次指定的時間內第一次購買使用初始查詢生成一個連接表查詢「? – nik
請參閱我的編輯#2謝謝 – Jeremy