Skip to content

Instantly share code, notes, and snippets.

@drob
Last active March 3, 2020 08:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save drob/3abc0b917cc8a941f39e to your computer and use it in GitHub Desktop.
Save drob/3abc0b917cc8a941f39e to your computer and use it in GitHub Desktop.
SELECT
sum(view_homepage) AS viewed_homepage,
sum(enter_credit_card) AS entered_credit_card
FROM (
-- Get the first time each user viewed the homepage.
SELECT
user_id,
1 AS view_homepage,
min(time) AS view_homepage_time
FROM event
WHERE
data->>'type' = 'view_homepage'
GROUP BY user_id
) e1 LEFT JOIN LATERAL (
-- For each (user_id, view_homepage_time) tuple, get the first time that
-- user did the enter_credit_card event, if one exists within two weeks.
SELECT
1 AS enter_credit_card,
time AS enter_credit_card_time
FROM event
WHERE
user_id = e1.user_id AND
data->>'type' = 'enter_credit_card' AND
time BETWEEN view_homepage_time AND (view_homepage_time + 1000*60*60*24*14)
ORDER BY time
LIMIT 1
) e2 ON true
@ltenzil
Copy link

ltenzil commented Oct 1, 2018

Hi @drob, thanks for the post of lateral join, by any chance, you made any video?

@magitk
Copy link

magitk commented Mar 3, 2020

Hi @drob, would you have a sample data for it? To me it does't require LATERAL at all…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment