我正在尝试比较与用户相关的日期列表。
举个例子:
user_id | visit_date
0000001 | 2018-03-12
0000001 | 2018-03-15
0000001 | 2018-03-27
0000002 | 2018-01-09
0000002 | 2018-02-01
0000002 | 2018-03-15
我希望每天看到有多少回访用户,其中返回的用户将被定义为未访问四周但现已返回的用户。
SELECT
a.user_id,
a.active_date
FROM (SELECT user_id,
visit_date as active_date,
DENSE_RANK() OVER(partition by user_id ORDER BY visit_date DESC) as rank
FROM table) a
WHERE a.rank =1
从今天开始,我会给出一个关于玩家最近一次访问的列表,我想要做的就是在任何特定的日期获得这个,这样,如果我们检查2018-03-15它会说用户2是当天重新启动,但是看2018-02-01会说他们还没有变为非活动状态并返回。
答案 0 :(得分:0)
实际上最终使用lag window function将自己整理出来,所以我想发布我的解决方案。
SELECT
a.user_id,
a.active_date,
date_part('days',a.active_date - lag(a.active_date,1)OVER(partition by a.user_id ORDER BY a.active_date)) as days_since_last_visit
FROM (SELECT
user_id,
visit_date as active_date
FROM table) a
然后,这会给我一张表格,其中包含日期和该日期与之前的最新日期之间的时间。使用上面的例子我得到:
user_id | active_date | days_since_last_visit
0000001 | 2018-03-12 | 0
0000001 | 2018-03-15 | 3
0000001 | 2018-03-27 | 12
0000002 | 2018-01-09 | 0
0000002 | 2018-02-01 | 23
0000002 | 2018-03-15 | 42
然后可以检查自上次访问后的天数是否大于28。
(仍然欢迎其他解决方案,因为我确信我既不是最好的解决方案也不是我唯一感兴趣的人。)