@n293
Аналитик

Как вытащить данные из БД с определенными признаками избегая вхождения других?

Есть таблица с метриками клиента, есть идентификатор сессии (session_id), есть наименование действия (action), которое сделал пользователь.

Нужно выгрузить сессии тех пользователей, у которых в рамках одной сессии есть четкий перечень действий которые они сделали.

Например, выгрузить те сессии, где сессия состоит из действий (порядок действия не имеет значения): 'вход', 'переход на страницу 1', 'переход на страницу 2', 'целевое действие'

Всего в таблице 15 разных действий фиксируется, нужно избегая остальных, вытащить только нужные сессии.

Я пытался это сделать следующим образом:

select session_id, action
from table
where action in ('вход', 'переход на страницу 1', 'переход на страницу 2', 'целевое действие')


Но при проверке запросом
select *
from table
where session_id = 'уникальный ид сессии'


вижу, что в сессии есть и другие действия, которые мне не подходят

Подскажите, как корректно сформировать sql-запрос
  • Вопрос задан
  • 41 просмотр
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Пересеките таблицу сессий саму на себя по идентификатору сессии, и добавьте исключающее условие not in по подключенной таблице.
select distinct t1.session_id, t1.action
from table t1
join table t2 on t1.session_id = t2.session_id
where t1.action in ('вход', 'переход на страницу 1', 'переход на страницу 2', 'целевое действие')
and t2.action not in (перечень того, что не должно быть точно)

Вариант 2.
select t1.session_id, t1.action
from table t1
where t1.action in ('вход', 'переход на страницу 1', 'переход на страницу 2', 'целевое действие')
and not exists(select 1 from table t2 where t1.session_id = t2.session_id and t2.action in (перечень того, что не должно быть точно))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы