Først fjerner jeg event_sequence
med en DISTINCT
(forudsat at alle begivenheder er på samme dag), så bruger jeg vinduesfunktionen lead
og sammenlign med datoen for næste besøg:
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)