我有一個顧客名單和訂單日期,我想找到在30天內至少有兩個訂單的顧客。找到在30天內下單的顧客
例如,如果客戶12在2013年6月20日對一種產品訂購併在2013年7月1日再次訂購。我希望查詢帶回客戶12
感謝
我有一個顧客名單和訂單日期,我想找到在30天內至少有兩個訂單的顧客。找到在30天內下單的顧客
例如,如果客戶12在2013年6月20日對一種產品訂購併在2013年7月1日再次訂購。我希望查詢帶回客戶12
感謝
SELECT
customerid,
count(*)
FROM
orderTable
WHERE
orderDate between <startDate> and <endDate>
GROUP BY
customerid
HAVING
count(*) >= 2
謝謝你的回答,但是有沒有辦法做到這一點,我有很多年的日期,並希望看到客戶在整個數據30天內返回。 – Woodington
像這樣的東西應該做你需要使用自加入什麼。您可能需要指數無論客戶標識符(在這種情況下customer_name
)
SELECT DISTINCT o1.customer_name
FROM orders o1
JOIN orders o2
ON o1.customer_name = o2.customer_name
AND o1.id <> o2.id
AND ABS(DATEDIFF(day, o1.order_date, o2.order_date)) < 30
如果您正在運行SQL Server 2012,可能會(應該)提供更好的性能;
WITH cte AS (
SELECT customer_name, order_date od1,
LAG(order_date) OVER (PARTITION BY customer_name ORDER BY order_date) od2
FROM orders
)
SELECT DISTINCT customer_name
FROM cte
WHERE DATEDIFF(day, od2, od1) < 30
這似乎是工作,我也有一個網站的來源,我想知道,如果客戶從同一網站訂購,具有相同的條件,例如客戶12從網站50訂購,在30天內2次。我可以在第一個答案中添加where子句嗎?再次感謝,對此感到抱歉。 – Woodington
@Woodington應該爲條件添加'AND o1.site = o2.site'和類似的東西。我想你可能還想選擇o1.site和o1.conditions到字段列表來獲取它們。 –
我必須找到源ID,我想過濾其他人,我在(1,6)中添加了a.source_id到最後,但這不能正常工作。 – Woodington
SELECT
customer_name,
COUNT(
CASE WHEN datediff(dd, order_date, getdate())
<=30 THEN 1
END
) AS order_count
FROM
order_table
GROUP BY
customer_name
您是否嘗試過任何查詢? – Hariharan
30天之內或30天之內? –
在30天內彼此。 – Woodington