[英]BigQuery: Rolling daily count visitor's summary of payment
我有這個數據:
日期 | visitor_id | 總付款 |
---|---|---|
2022-01-01 | 一種 | 20 |
2022-01-01 | 乙 | 15 |
2022-01-01 | C | 20 |
2022-01-02 | 乙 | 10 |
2022-01-02 | 丁 | 25 |
我希望每天有 total_payment 等於或大於 20 美元的訪問者數量,話雖如此,我希望的結果是:
日期 | 計數訪問者 |
---|---|
2022-01-01 | 2個 |
2022-01-02 | 4個 |
2022-01-01 是 2,因為只有 A 和 C 的付款超過 20 美元,但是在 2022-01-02 又增加了 2,因為 B 是 35 美元(總和),D 是 25 美元。
對此有任何可能的查詢嗎? 我希望我的描述很清楚。 先感謝您。
您可以使用此查詢作為解決方案。 首先,我計算每個用戶的累計付款。 然后,我找到每個用戶超過 20$ 累計付款的最短日期。 在最后一步,我計算每個最短日期的用戶數,並累加該數字。 在 output 中,您不必有 first_day_users 列,但我保留它是為了更容易理解代碼。
WITH
data AS(
SELECT "2022-01-01" AS date, "A" AS visitor_id, 20 AS total_payment UNION ALL
SELECT "2022-01-01" AS date, "B" AS visitor_id, 15 AS total_payment UNION ALL
SELECT "2022-01-01" AS date, "C" AS visitor_id, 20 AS total_payment UNION ALL
SELECT "2022-01-02" AS date, "B" AS visitor_id, 10 AS total_payment UNION ALL
SELECT "2022-01-02" AS date, "D" AS visitor_id, 25 AS total_payment
),
user_cumulatives as
(
SELECT
visitor_id,
date,
SUM(total_payment) OVER (PARTITION BY visitor_id ORDER BY date) as cumulative_payment
FROM data
),
user_first_dates as
(
select visitor_id, min(date) as date
from user_cumulatives
where cumulative_payment >= 20
group by 1
)
select date, count(*) as first_day_users, sum(count(*)) over (order by date) as count_visitor
from user_first_dates
group by 1
order by date
歡迎@Indri
下面的查詢將為您提供每天的行總和,其中total_amount
大於等於 20,我相信這應該會給您您正在尋找的答案:
WITH data AS(
SELECT "2022-01-01" AS date, "A" AS visitor_id, 20 AS total_payment
UNION ALL
SELECT "2022-01-01" AS date, "B" AS visitor_id, 15 AS total_payment
UNION ALL
SELECT "2022-01-01" AS date, "C" AS visitor_id, 20 AS total_payment
UNION ALL
SELECT "2022-01-02" AS date, "A" AS visitor_id, 10 AS total_payment
UNION ALL
SELECT "2022-01-02" AS date, "D" AS visitor_id, 25 AS total_payment
)
SELECT
*,
COUNT(*) OVER(ORDER BY date)
FROM data
WHERE total_payment >= 20
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.