按用户比较活动日期

时间:2018-04-24 14:34:28

标签: postgresql

我正在尝试比较与用户相关的日期列表。

举个例子:

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会说他们还没有变为非活动状态并返回。

1 个答案:

答案 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。

(仍然欢迎其他解决方案,因为我确信我既不是最好的解决方案也不是我唯一感兴趣的人。)