AP
то есть count тех строк которые имеют евент хинт и он расположен между старт имейдж и имейдж комплит
select
user_id,
arraySum(serie->arraySum(e->e='Hint',serie), --суммируем hint'ы в сериях а потом все серии
arrayFilter(serie->serie[1]='StartImage' and serie[-1]='ImageComplete', --оставляем только серии которые начались со StartImage и закончились ImageComplete
arraySplit(event->event = 'StartImage', --разбиваем события на серии начинающиеся со StartImage
groupArray(event_name) as events))) as hints_count
from
(
select
user_id,
datetime,
event_name
from
(
select
intDiv(number, 2000) as user_id,
now() + number % 2000 as datetime,
multiIf(
(number % 2000) % 30 = 0, 'StartImage',
(number % 2000) % 30 = 24, 'ImageComplete',
rand() % 20 <= 5, 'Hint',
'Other') as event_name
from numbers(10000000)
)
where event_name in ('StartImage', 'ImageComplete', 'Hint')
order by datetime
)
group by user_id