Ниже для BigQuery Standard SQL
#standardSQL
SELECT
path,
SUM(transaction) transactions
FROM (
SELECT
STRING_AGG(referral, ' > ') path,
SUM(transaction) transaction
FROM (
SELECT
user_id, visit_date, referral, transaction,
IFNULL(SUM(transaction) OVER(PARTITION BY user_id ORDER BY visit_date ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), 0) grp
FROM `project.dataset.table`
)
GROUP BY user_id, grp
)
GROUP BY path
Вы можете проверить, поиграть с выше, используя фиктивные данные из вашего вопроса, как показано ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1234 user_id, '20180101' visit_date, 'site2' referral, 0 transaction UNION ALL
SELECT 1234, '20180102', 'site3', 1 UNION ALL
SELECT 1234, '20180103', 'site2', 1 UNION ALL
SELECT 4567, '20180104', 'site4', 0 UNION ALL
SELECT 4567, '20180105', 'site5', 0 UNION ALL
SELECT 5678, '20180101', 'site2', 0 UNION ALL
SELECT 5678, '20180102', 'site3', 1
)
SELECT
path,
SUM(transaction) transactions
FROM (
SELECT
STRING_AGG(referral, ' > ') path,
SUM(transaction) transaction
FROM (
SELECT
user_id, visit_date, referral, transaction,
IFNULL(SUM(transaction) OVER(PARTITION BY user_id ORDER BY visit_date ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), 0) grp
FROM `project.dataset.table`
)
GROUP BY user_id, grp
)
GROUP BY path
ORDER BY transactions DESC
с результатом
Row path transactions
1 site2 > site3 2
2 site2 1
3 site4 > site5 0