сравнение активных дат пользователем - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь сравнить списки дат, связанных с пользователями.

Как пример:

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 голосов
/ 24 апреля 2018

На самом деле все закончилось тем, что я сам решил это с помощью функции окна запаздывания , так что я решил опубликовать свое решение.

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.

(по-прежнему приветствую другие решения, так как я уверен, что у меня нет ни одного удачного решения, и я не единственный, кому это будет интересно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...