如果我真的想把它全部塞进去,标题就太罗嗦了,但这就是我需要帮助的地方......
我们正在尝试计算用户留存率。我们的用户的作业开始日期和作业结束日期可能重叠。我需要做的是查看所有候选作业并确定它们是否被保留(从上一个结束到新开始之间的 30 天或更短)。棘手的部分:我需要将保留信用分配给之前的分配结束日期。这是数据的预览:
month | user_id | start_date | end_date | rank | days_btw_assignment
1 5 1-1-16 1-31-16 1 NULL
2 5 2-14-16 4-15-16 2 15
6 4 6-01-16 11-01-16 1 NULL
8 4 8-01-16 11-01-16 2 -81
因此,对于用户 5,我需要将保留归功于 1 月 16 日,因为他们的任务结束日期是 16 年 1 月 31 日。对于有作业重叠的用户 4,我会将保留归功于 nov-16',因为他们之前的作业结束日期是 16 年 1 月 1 日。
我已将此示例限制为只有 2 个分配的用例,但可能还有更多。我只需要朝着正确的方向迈出一步,我可能可以自己处理所有其他用例。
这是我目前正在使用的示例代码:
with placement_facts as (select date_trunc('month',assignment_start_date) as month, user_id, assignment_start_date, assignment_end_date, rank () over (partition by user_id order by assignment_start_date asc), extract( day from assignment_start_date - lag(assignment_end_date, 1) over (partition by user_id order by assignment_start_date asc)) as time_btw_placement
from activations as ca
join offers on ca.offer_id = offers.id
where assignment_start_date != assignment_end_date
order by 2,4 asc)
select placement_facts.month, count(distinct case when time_btw_placement <=30 then user_id else null end) as retained_raw
from placement_facts
group by 1;
感谢您的帮助,如果我需要澄清任何事情,请联系我!