Вы можете жестко закодировать этапы конвейера в таблице event_list
следующим образом:
id | stage_name
1 | first stage
2 | second stage
3 | third stage
4 | fourth stage
UPD: чем глубже стадия воронки, тем выше ее идентификатор.Таким образом, вы можете сравнить их, т.е. third stage
глубже, чем second stage
, потому что 3>2
.Таким образом, если вам нужно найти людей, которые достигли 2-го этапа, это включает людей, у которых есть события с id = 2 ИЛИ события с id> 2, то есть события, расположенные глубже в последовательности.
Если пропущен second stage
и third stage
записывается для некоторого человека, которого вы все равно можете считать этим человеком как "достигшего второго этапа", присоединив данные ваших событий к этой таблице на stage_name
и посчитав количество записей с помощью id>=2
, например
select count(distinct user_id)
from event_data t1
join event_list t2
using (stage_name)
where t2.id>=2
В качестве альтернативы, вы можете присоединиться к таблице событий слева до event_list
и заполнить пробелы, используя функцию lag
, которая возвращает значение предыдущей строки (т. Е. Присваивая метку времени first stage
для second stage
вслучай выше)