Это должно помочь (при условии, что вы хотите дельту в minute
).Вы всегда можете переключиться на любой необходимый вам период (hour
, second
и т. Д.)
Обратите внимание на использование аналитической функции LAG
, которая использует данные, разбитые на user_id
и упорядоченные по метке времени ts
.Также обратите внимание, что первое появление user_id
получает разницу 0
, потому что это первый раз, когда пользователь появился :).Надеюсь, это поможет.
select user_id, coalesce(timestamp_diff(ts_a, ts_b, minute), 0) as diff_from_prv_visit_minutes from (
select user_id, ts as ts_a, lag(ts) over (partition by user_id order by ts) as ts_b
from `mydataset.mytable`
)