簡體   English   中英

按月查找活躍客戶-SQL-Big Query

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM