Redshift SQL - Пропущенная последовательность - PullRequest
0 голосов
/ 15 ноября 2018

Я работаю над данными о конвейере кандидатов и мне нужно получить количество кандидатов, которые прошли через каждый этап конвейера / воронки.Если кандидат пропускает этап, мне все равно нужно подсчитать его на этапе.Вот пример того, как эти данные могут выглядеть для одного кандидата:

Stage name | Entered on
Application Review | 9/7/2018
Recruiter Screen | 9/10/2018
Phone Interview | blank
Interview | 9/17/2018
Interview 2 | 9/20/2018
Offer | blank

Вот как выглядит таблица:

CREATE TABLE application_stages (
application_id bigint,
stage_id bigint,
entered_on timestamp without time zone,
exited_on timestamp without time zone,
stage_name character varying
);

В этом примере я хочу подсчитать обзор приложений черезИнтервью 2 (включая пропущенную / пустую фазу телефонного интервью), но не предложение.Как бы я написал выше в SQL?(Данные хранятся в Amazon Redshift. Использование SQL-инструмента для запросов.)

Также, пожалуйста, дайте мне знать, есть ли что-то еще, что я могу добавить к своему вопросу, чтобы сделать проблему / решение более понятным.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вот SQL, которым я закончил. Спасибо за идеи, @AlexYes!

select stage_name,  
application_stages.application_id, entered_on, 
case when entered_on is NULL then lead(entered_on,1) 
ignore nulls
over 
(PARTITION BY application_stages.application_id order by case stage_name 
when 'Application Review' then 1 
when 'Recruiter Screen' then 2 
when 'Phone Interview' then 3
when 'Interview' then 4
when 'Interview 2' then 5
when 'Offer' then 6
when 'Hired' then 7 end) else entered_on end as for_count, exited_on
from application_stages

Я понимаю, что приведенный выше SQL не дает мне счет, но я делаю счет в Таблице. Рад иметь вышеупомянутый формат на случай, если мне нужно будет выполнить другие вычисления в новом поле "for_count".

0 голосов
/ 15 ноября 2018

Вы можете жестко закодировать этапы конвейера в таблице 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 вслучай выше)

...