PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL :Identifier les visiteurs de retour en fonction de la date - jointures ou fonctions de fenêtre ?

Tout d'abord, je supprime event_sequence avec un DISTINCT (en supposant que tous les événements ont lieu le même jour), j'utilise alors la fonction de fenêtre lead et comparer avec la date de la prochaine visite :

SELECT visitor_id,
       session_id,
       COALESCE(
          lead(d_date) OVER w - d_date,
          10
       ) < 7 AS revisited,
       d_date
FROM (SELECT DISTINCT visitor_id,
                      session_id,
                      d_date
      FROM "table"
     ) t
WINDOW w AS (PARTITION BY visitor_id
             ORDER BY d_date
             ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
            )
ORDER BY visitor_id, session_id;

┌────────────┬────────────┬───────────┬────────────┐
│ visitor_id │ session_id │ revisited │   d_date   │
├────────────┼────────────┼───────────┼────────────┤
│          1 │          1 │ t         │ 2017-01-01 │
│          1 │          2 │ f         │ 2017-01-05 │
│          1 │          3 │ t         │ 2017-01-20 │
│          1 │          4 │ f         │ 2017-01-25 │
│          2 │          1 │ t         │ 2017-01-02 │
│          2 │          2 │ f         │ 2017-01-02 │
│          2 │          3 │ f         │ 2017-01-18 │
└────────────┴────────────┴───────────┴────────────┘
(7 rows)