[英]Finding Active customers by month- SQL- Big Query
我想找到一種方法來統計每月進行促銷活動的客戶數量,條件是案例陳述中包含的日期。 我嘗試了以下查詢,但某些范圍存在重疊,如果我每月執行一個案例,我將無法獲得相同的計數。 我的想法是創建一個循環/遞歸方法,該方法需要開始和結束時間,但我在創建時遇到問題。
SELECT
region,
#June data
CASE
WHEN DATE (start_time) >= '2022-06-01' AND DATE(end_time) <= '2022-06-30'
OR ( DATE(start_time) < '2022-06-01'AND DATE(end_time) >= '2022-06-01' AND DATE(end_time)<='2022-06-30')
OR (DATE(end_time)>'2022-06-30' AND DATE(start_time)>='2022-06-01' AND DATE(start_time)<='2022-06-30')
THEN '2022-06-01'
#July data
WHEN DATE (start_time) >= '2022-07-01'AND DATE(end_time) <= '2022-07-31'
OR ( DATE(start_time) < '2022-07-01'AND DATE(end_time) >= '2022-07-01'AND DATE(end_time)<='2022-07-31')
OR (DATE(end_time)>'2022-07-31'AND DATE(start_time)>='2022-07-01'AND DATE(start_time)<='2022-07-31')
THEN '2022-07-01'
#August data
WHEN DATE (start_time) >= '2022-08-01' AND DATE(end_time) <= '2022-08-31'
OR ( DATE(start_time) < '2022-08-01'AND DATE(end_time) >= '2022-08-01' AND DATE(end_time)<='2022-08-31')
OR (DATE(end_time)>'2022-08-31' AND DATE(start_time)>='2022-08-01' AND DATE(start_time)<='2022-08-31')
THEN '2022-08-01'
ELSE
STRING(DATE(DATE_TRUNC(start_time,month)))
END
AS month,
COUNT(DISTINCT customer_id) AS active_customers,
FROM
customers_table
GROUP BY region,month
請讓我知道是否需要更清楚,這是我的第一個問題之一。 謝謝!
我假設您希望 WHEN 中的每一行都是“或”。 所以第一行也需要用括號括起來。
也可以使用 DATE_TRUNC() 縮短每個語句
這是第一個 WHEN 的示例:
WHEN
(DATE (start_time) >= '2022-06-01' AND DATE(end_time) <= '2022-06-30')
OR ( DATE(start_time) < '2022-06-01'AND DATE_TRUNC(end_time,month) = '2022-06-01')
OR (DATE(end_time)>'2022-06-30' AND DATE_TRUNC(start_time,month) ='2022-06-01')
THEN '2022-06-01'
希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.