此Periscope数据博客文章介绍了如何使用下面的SQL查询来查找本月访问过您网站的用户数量,即上个月,即"保留":
with monthly_activity as (
select distinct
date_trunc('month', created_at) as month,
user_id
from events
)
select
this_month.month,
count(distinct user_id)
from monthly_activity this_month
join monthly_activity last_month
on this_month.user_id = last_month.user_id
and this_month.month = last_month.month + interval '1 month' -- date join
group by month
但是如果将保留定义为上个月没有访问过"那该怎么办?但是"过去任何一个月都访问了 "?
在这种情况下,我们希望日期加入(在上述查询中突出显示为注释)不仅仅是过去的1个月,而是过去的所有个月。
即。像这样的东西,但没有硬编码:
and this_month.month = last_month.month + interval '1 month'
and this_month.month = last_month.month + interval '2 month'
and this_month.month = last_month.month + interval '3 month'
...
我很难知道最好的方法是什么。
我尝试了以下变通方法,但我认为它们会导致奇怪的笛卡尔产品,因为我的查询还没有运行:
AND current_month.month > past_logs.month -- doesn't run
和
AND past_logs.month IN (select i::date from generate_series('2014-10-01',
current_month.month, '1 month'::interval) i) -- doesn't run
关于最佳方法的想法?