milestone 2/4 Ordered conversion funnels
Count users who complete events in the required order.
Social Product Analytics · Clean event retries, reconstruct ordered funnels, sessionize activity, and compare experiment conversions.
approach
A funnel is an ordered journey. Find the first view, then the first signup on or after that view, then the first purchase on or after signup. A purchase that happens before signup does not complete this funnel. Equal timestamps are allowed here.
worked-example.sql
-- Build one row per member at each stage. WITH views AS( SELECT member_id,MIN(event_at) AS viewed_at FROM social_events WHERE event_type='view' GROUP BY member_id ), signups AS( SELECT v.member_id,v.viewed_at,MIN(e.event_at) AS signed_at FROM views v LEFT JOIN social_events e ON e.member_id=v.member_id AND e.event_type='signup' AND e.event_at>=v.viewed_at GROUP BY v.member_id,v.viewed_at ), funnel AS( SELECT s.member_id, s.viewed_at, s.signed_at, MIN(e.event_at) AS purchased_at FROM signups s LEFT JOIN social_events e ON e.member_id=s.member_id AND e.event_type='purchase' AND e.event_at>=s.signed_at GROUP BY s.member_id,s.viewed_at,s.signed_at ) SELECT COUNT(*) AS viewed, COUNT(signed_at) AS signed_up, COUNT(purchased_at) AS purchased FROM funnel;
data for this milestone
social_events6 columns · 22 rows
| idinteger · key | event_keytext | member_idinteger | event_typetext | event_attext | ingested_attext |
|---|---|---|---|---|---|
| 1 | a | 1 | view | 2025-01-01 10:00:00 | 2025-01-01 10:00:01 |
| 2 | b | 1 | signup | 2025-01-01 10:03:00 | 2025-01-01 10:03:01 |
| 3 | c | 1 | purchase | 2025-01-01 10:05:00 | 2025-01-01 10:05:01 |
| 4 | a | 1 | view | 2025-01-01 10:00:00 | 2025-01-01 10:10:00 |
| 5 | d | 2 | view | 2025-01-02 09:00:00 | 2025-01-02 09:00:01 |
showing 5 of 22 rows