A.
SELECT t1.user_id, t1.event_name AS event_name1, t1.event_time AS event_time1, t2.event_name AS event_name2, t2.event_time AS event_time2
, t3.event_name AS event_name3, t3.event_time AS event_time3
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t1
JOIN (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t2
ON t1.user_id = t2.user_id
JOIN (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t3
ON t1.user_id = t3.user_id
WHERE t1.event_name = 'live_room'
AND t2.event_name = 'add_cart'
AND t3.event_name = 'pay'
AND t1.rn + 1 = t2.rn
AND t3.rn > t2.rn
AND TIMESTAMPDIFF(HOUR, t2.event_time, t3.event_time) <= 48;
B.
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time2 DESC) AS rn
FROM (
SELECT t1.user_id, t1.event_name AS event_name1, t1.event_time AS event_time1, t2.event_name AS event_name2, t2.event_time AS event_time2
, t3.event_name AS event_name3, t3.event_time AS event_time3
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t1
JOIN (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t2
ON t1.user_id = t2.user_id
JOIN (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t3
ON t1.user_id = t3.user_id
WHERE t1.event_name = 'live_room'
AND t2.event_name = 'add_cart'
AND t3.event_name = 'pay'
AND t1.rn + 1 = t2.rn
AND t3.rn > t2.rn
AND TIMESTAMPDIFF(HOUR, t2.event_time, t3.event_time) <= 48
) t4
) t5
WHERE rn = 1;
C.
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time2 DESC) AS rn
FROM (
SELECT t1.user_id, t1.event_name AS event_name1, t1.event_time AS event_time1, t2.event_name AS event_name2, t2.event_time AS event_time2
, t3.event_name AS event_name3, t3.event_time AS event_time3
FROM (
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t0
WHERE event_name = 'live_room'
) t1
JOIN (
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t0
WHERE event_name = 'add_cart'
) t2
ON t1.user_id = t2.user_id
JOIN (
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t0
WHERE event_name = 'pay'
) t3
ON t1.user_id = t3.user_id
WHERE t1.rn + 1 = t2.rn
AND t3.rn > t2.rn
AND TIMESTAMPDIFF(HOUR, t2.event_time, t3.event_time) <= 48
) t4
) t5
WHERE rn = 1;
D.
SELECT t1.user_id, t1.event_name AS event_name1, t1.event_time AS event_time1, t2.event_name AS event_name2, t2.event_time AS event_time2
, t3.event_name AS event_name3, t3.event_time AS event_time3
FROM (
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t0
WHERE event_name = 'live_room'
) t1
JOIN (
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t0
WHERE event_name = 'add_cart'
) t2
ON t1.user_id = t2.user_id
JOIN (
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY event_time) AS rn
FROM event_table
) t0
WHERE event_name = 'pay'
) t3
ON t1.user_id = t3.user_id
WHERE t1.rn + 1 = t2.rn
AND t3.rn > t2.rn
AND TIMESTAMPDIFF(HOUR, t2.event_time, t3.event_time) <= 48;