#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';