Ниже для BigQuery Standard SQL
#standardSQL
SELECT dt, 1 + SUM(start) OVER(ORDER BY dt) journey
FROM (
SELECT dt, IF(TIMESTAMP_DIFF(dt, LAG(dt) OVER(ORDER BY dt), MINUTE) > 40, 1, 0) start
FROM `project.dataset.table`
)
Вы можете протестировать, поиграть с выше, используя фиктивные данные из вашего вопроса, как показано ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT TIMESTAMP '2018-04-03T08:06:04' dt UNION ALL
SELECT '2018-04-03T08:07:27' UNION ALL
SELECT '2018-04-03T08:18:18' UNION ALL
SELECT '2018-04-03T10:08:27' UNION ALL
SELECT '2018-04-03T10:22:24' UNION ALL
SELECT '2018-04-03T12:08:50' UNION ALL
SELECT '2018-04-03T12:24:49' UNION ALL
SELECT '2018-04-03T12:24:51'
)
SELECT dt, 1 + SUM(start) OVER(ORDER BY dt) journey
FROM (
SELECT dt, IF(TIMESTAMP_DIFF(dt, LAG(dt) OVER(ORDER BY dt), MINUTE) > 40, 1, 0) start
FROM `project.dataset.table`
)
-- ORDER BY dt
с результатом
Row dt journey
1 2018-04-03 08:06:04 UTC 1
2 2018-04-03 08:07:27 UTC 1
3 2018-04-03 08:18:18 UTC 1
4 2018-04-03 10:08:27 UTC 2
5 2018-04-03 10:22:24 UTC 2
6 2018-04-03 12:08:50 UTC 3
7 2018-04-03 12:24:49 UTC 3
8 2018-04-03 12:24:51 UTC 3
Примечание: я вывел логику из приведенного ниже утверждения в вашем вопросе
Я попытался добавить + - 40 минут ко времени, и все транзакции, входящие в диапазон, будут представлять собой одно уникальное путешествие
Более подробная версия:
#standardSQL
SELECT dt, 1 + COUNTIF(start) OVER(ORDER BY dt) journey
FROM (
SELECT dt, (TIMESTAMP_DIFF(dt, LAG(dt) OVER(ORDER BY dt), MINUTE) > 40) start
FROM `project.dataset.table`
)
ORDER BY dt