Работаете в стандартном SQL / BQ, но пытаетесь найти способ получить среднюю разницу между двумя временными метками для каждого пользователя для последовательных дат?
Мои данные выглядят так:
UserId Login
0 2016-07-14 14:43:30 +0000
2 2018-07-09 17:19:55 +0000
2 2018-07-10 20:38:37 +0000
2 2014-07-12 17:37:20 +0000
2 2018-07-13 01:08:20 +0000
3 2015-12-04 17:17:41 +0000
3 2015-12-04 20:14:43 +0000
Итак, на данный момент у меня есть:
SELECT UserId
,CASE WHEN(
(Magic)
THEN AVG(TIMESTAMP_DIFF(Login2, Login, HOUR) ELSE NULL END))) AS hours
FROM TABLE
GROUP BY 1
(Волшебная) часть - это застрявшая часть, в которой я хотел бы указать, являются ли даты для каждого пользователя последовательными, затем взять разность последней даты входа в систему и вычесть ее до текущей даты входа в систему. Могу ли я применить задержку и сказать, что если разница между следующей датой и первой датой находится в пределах дня, то это последовательно? Или к этому есть подход с разделением / оконной функцией?
Login2 будет второй меткой времени входа в систему следующей последовательной даты.
Результаты, которые я хотел бы получить:
UserId Average Hours between Consecutive Logins
0 NULL
2 17.5 hours
3 3 hours
- Для UserId 0 это NULL, потому что нет второго времени входа в систему для сравнения.
- Для UserId 2 он получает среднее значение между разницей в двух последовательных датах входа в систему (07/09 - 07/10 и 07/12 - 07/13) (27 часов + 8 часов / 2) = 5,5 часов
- Для UserId 3 одна точка данных с тем же входным днем с разницей в 3 часа, так что она соответствует условию последовательности, и получила среднюю разницу одной точки данных