Snowflake/SQL 计算每个日期过去 30 天内的不同用户 ID 计数
Snowflake/SQL Calculate distinct user Id count in trailing last 30 days for each date
我正在尝试获取过去 30 天内不同 ID 的每日计数。
输出应如下所示:
DATE Count(Distinct ID) Trailing Last 30D Equation
2022-01-02 232 Distinct IDs in the last 30 days from 2022-01-02
2022-01-03 1231 [...]
2022-01-04 123
2022-01-05 242
2022-01-06 3432
但是,根据我下面的查询 - 它没有 return 过去 30 天内正确的不同 ID 计数。有人可以建议我应该如何正确地解决这个问题吗?有没有办法合并 window 函数来计算过去 30 天内 ID 的不同计数?
WITH DATE_SPINE AS (
SELECT d.DATE
FROM DATE d
WHERE d.DATE BETWEEN '2022-01-01' AND '2022-05-01'
)
SELECT d.DATE,
COUNT(DISTINCT IFF(u.EVENT_DATE >= d.DATE - INTERVAL '30 DAYS', ID, NULL)) AS TRAILING_30_MAU
FROM DATE_SPINE D
LEFT JOIN USERS u ON u.EVENT_DATE = d.DATE
GROUP BY 1
ORDER BY 1 DESC
加入 the_date-29
和 the_date
之间的日期列表,计数:
with dates as (
select distinct o_orderdate a_date
from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS
)
select count(distinct o_custkey), a_date, count(distinct o_orderdate)
from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS a
join dates b
on a.o_orderdate between b.a_date-29 and b.a_date
group by 2
order by 2
limit 100
我正在尝试获取过去 30 天内不同 ID 的每日计数。
输出应如下所示:
DATE Count(Distinct ID) Trailing Last 30D Equation
2022-01-02 232 Distinct IDs in the last 30 days from 2022-01-02
2022-01-03 1231 [...]
2022-01-04 123
2022-01-05 242
2022-01-06 3432
但是,根据我下面的查询 - 它没有 return 过去 30 天内正确的不同 ID 计数。有人可以建议我应该如何正确地解决这个问题吗?有没有办法合并 window 函数来计算过去 30 天内 ID 的不同计数?
WITH DATE_SPINE AS (
SELECT d.DATE
FROM DATE d
WHERE d.DATE BETWEEN '2022-01-01' AND '2022-05-01'
)
SELECT d.DATE,
COUNT(DISTINCT IFF(u.EVENT_DATE >= d.DATE - INTERVAL '30 DAYS', ID, NULL)) AS TRAILING_30_MAU
FROM DATE_SPINE D
LEFT JOIN USERS u ON u.EVENT_DATE = d.DATE
GROUP BY 1
ORDER BY 1 DESC
加入 the_date-29
和 the_date
之间的日期列表,计数:
with dates as (
select distinct o_orderdate a_date
from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS
)
select count(distinct o_custkey), a_date, count(distinct o_orderdate)
from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS a
join dates b
on a.o_orderdate between b.a_date-29 and b.a_date
group by 2
order by 2
limit 100