Поиск всех последовательностей в таблице

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть большая таблица (около 500 миллионов строк) — это SQL server, который выглядит следующим образом

 userId timeStamp action
A      230920323 X1
A      239489349 X2
B      239823788 X2
A      389493849 X3
...
 

Я хочу найти все преобразованные воронки с определенной последовательностью действий
В этом примере количество равно 1, что является пользователем A, у которого есть X1 X2 X3 в строке
, например, я хочу найти всех пользователей, которые выполняли действия X1 --> X2 --> X3 подряд

У меня есть решение, которое объединяет таблицу с самим собой несколько раз. но это очень медленно. Есть ли какой-либо другой вариант для этого?

Комментарии:

1. что такое converted funnels ? Также, пожалуйста, предоставьте больше выборочных данных и соответствующий требуемый результат. И, пожалуйста, поделитесь своим текущим запросом / решением

2. В примере количество равно 1, что соответствует пользователю A, у которого X1 X2 X3 в строке

Ответ №1:

LEAD LAG Аналитические функции и можно использовать следующим образом:

 select distinct userid from
(select t.*, 
        lead(action) over (partition by userid order by timestamp) as lead_Action,
        lag(action) over (partition by userid order by timestamp) as lag_Action from t)
where lag_Action = 'X1' and action = 'X2' and lead_Action = 'X3';