`UserID` UInt64,
`Url` String,
`CreatedTime` DateTime
) ENGINE = MergeTree()
ORDER BY CreatedTime
Подскажите, пожалуйста, как по ней считать среднюю продолжительность сессий юзеров по дням, если сессией считается последовательность событий, между которыми не более 15 минут? Не могу придумать запрос...
Можно сгруппировать по дням потом arrayMap(x-> x[-1] - x[1] , arraySplit (x -> x > 15*60,arrayDifference))
а как перевести данные в array ?
arrayDifference не работает с DateTime ? arrayDifference cannot process values of type DateTime: While processing toDate(CreatedTime) AS d, arrayDifference(groupArray(CreatedTime))
Ну можно привести к UInt32(ts)
Огромное спасибо за помощь. Вышел вот такой запрос по расчёту продолжительности сессий по дням по юзерам: SELECT toDate(CreatedTime) AS d, UserID, arrayAvg(arrayMap(x -> arraySum(x), arraySplit(x -> (x > (15 * 60)), arrayDifference(arraySort(groupArray(toUInt32(CreatedTime))))))) AS SessionDuratio, arrayAvg(arrayMap(x -> arrayCount(arrayMap(x -> toUInt8(x), x)), arraySplit(x -> (x > (15 * 60)), arrayDifference(arraySort(groupArray(toUInt32(CreatedTime))))))) AS EventsPerSession FROM Events GROUP BY d, UserID LIMIT 10
Обсуждают сегодня