22. time view click buy
100 100
200 200
300 300
400 400
500 500
600 600
After (1)
23. Query (1)
#standardSQL
SELECT
time,
(CASE event WHEN "view" THEN time END) AS view,
(CASE event WHEN "click" THEN time END) AS click,
(CASE event WHEN "buy" THEN time END)AS buy
FROM
events
24. time view click buy
100 100
200 200
300 300
400 400
500 500
600 600
Before (2)
35. #standardSQL
SELECT
LAST_VALUE(view IGNORE NULLS) OVER (ORDER BY time) AS view,
LAST_VALUE(click IGNORE NULLS) OVER (ORDER BY time) AS click,
LAST_VALUE(buy IGNORE NULLS) OVER (ORDER BY time) AS buy
FROM
query_1_result
✅ Query (2)
49. #standardSQL
SELECT
(CASE WHEN view IS NOT NULL THEN view END) AS view,
(CASE WHEN click IS NOT NULL THEN view END) AS click,
(CASE WHEN buy IS NOT NULL THEN view END) AS buy
FROM query_3_result
Query (4)
52. #standardSQL
SELECT
"view" AS step,
COUNT(DISTINCT view) AS count
FROM query_4_result
UNION ALL
SELECT "click", COUNT(DISTINCT click)
FROM query_4_result
UNION ALL
SELECT "buy", COUNT(DISTINCT buy)
FROM query_4_result
Query (4)
58. #standardSQL
SELECT
LAST_VALUE(view IGNORE NULLS) OVER (ORDER BY time) AS view,
LAST_VALUE(click IGNORE NULLS) OVER (ORDER BY time) AS click,
LAST_VALUE(buy IGNORE NULLS) OVER (ORDER BY time) AS buy
FROM
query_1_result
Back to Query (2)
59. user time view click buy
A 100 100
B 200 200
B 300 300
A 400 400
A 500 500
A 600 600
Before (2)
60. user time view click buy
A 100 100
B 200 100 200
B 300 300 200
A 400 300 400
A 500 300 500
A 600 300 500 600
⚠ After (2)
61. user time view click buy
A 100 100
B 200 200
B 300 300 200
A 400 100 400
A 500 100 500
A 600 100 500 600
✅ After (2)
62. #standardSQL
SELECT
LAST_VALUE(view IGNORE NULLS)
OVER (PARTITION BY user ORDER BY time) AS view,
LAST_VALUE(click IGNORE NULLS)
OVER (PARTITION BY user ORDER BY time) AS click,
LAST_VALUE(buy IGNORE NULLS)
OVER (PARTITION BY user ORDER BY time) AS buy
FROM
query_1_result
✅ Query (2)
63. user time view click buy
A 100 100
A 400 400
A 500 500
A 600 600
PARTITION BY user
user time view click buy
A 100 100
B 200 200
B 300 300
A 400 400
A 500 500
A 600 600 user time view click buy
B 200 200
B 300 300
64. user time view click buy
A 100 100
A 400 100 400
A 500 100 500
A 600 100 500 600
LAST_VALUE & PARTITION BY
user time view click buy
A 100 100
B 200 200
B 300 300
A 400 400
A 500 500
A 600 600 user time view click buy
B 200 200
B 300 300 200
65. user time view click buy
A 100 100
A 400 100 400
A 500 100 500
A 600 100 500 600
user time view click buy
B 200 200
B 300 300 200
user time view click buy
A 100 100
B 200 200
B 300 300 200
A 400 100 400
A 500 100 500
A 600 100 500 600
LAST_VALUE & PARTITION BY
66. user time view click buy
A 100 100
B 200 200
B 300 300 200
A 400 100 400
A 500 100 500
A 600 100 500 600
67. user time view click buy
A 100 100
B 200 200
B 300 300 200
A 400 100 400
A 500 100 500
A 600 100 500 600
<
<
68. user time view click buy
A 100 100
B 200
B 300 300
A 400 100 400
A 500 100 500
A 600 100 500 600
69. user time view click buy
A 100 100
B 200
B 300 300
A 400 100 100
A 500 100 100
A 600 100 100 100
70. user time view click buy
A 100 100
B 200
B 300 300
A 400 100 100
A 500 100 100
A 600 100 100 100
71. user time view click buy
A 100 100
B 200
B 300 300
A 400 100 100
A 500 100 100
A 600 100 100 100
72. user time view click buy
A 100 100
B 200
B 300 300
A 400 100 100
A 500 100 100
A 600 100 100 100
100
300
100 100