Я уже неделю пытаюсь найти решение следующей загадки Redshift (кажется, я одержим ею):
В Redshift есть таблица событий ("event_user_item")с пользователями, запускающими события для определенных элементов путем ввода кода элемента, который отображается в столбце event_value.
Неудачная отправка состоит из последовательности типов событий PageLoad-ItemCode-ErrorResponse , но такойтипы событий не обязательно являются последовательными, то есть между каждым из них может быть ряд других типов событий для user_id.
Я публикую небольшой отрывок, основанный на 3 различных user_ids, которые должны иллюстрировать соответствующие сценарии с акцентом на Сбойных отправках.
ord_num event_type event_value user_id event_datetime
1 PageLoad 124 03/09/2018 21:48:39
2 ItemCode LG56731 124 03/09/2018 21:48:53
4 Details1PageLoad 124 03/09/2018 21:48:56
8 PageLoad 124 03/09/2018 22:02:23
9 ItemCode GU07019 124 03/09/2018 22:02:32
10 ErrorResponse Some message 124 03/09/2018 22:02:32
51 PageLoad 228 04/09/2018 12:38:30
52 ItemCode EQ23487 228 04/09/2018 12:38:33
53 ErrorResponse Some message 228 04/09/2018 12:38:34
54 PageLoad 304 04/09/2018 15:43:14
55 ItemCode OB68102 304 04/09/2018 15:43:57
56 ErrorResponse Some message 304 04/09/2018 15:43:58
57 ItemCode PB68102 304 04/09/2018 15:44:21
58 ErrorResponse Some message 304 04/09/2018 15:44:22
59 PageLoad 304 05/09/2018 11:19:37
60 ItemCode OB68102 304 05/09/2018 11:20:17
62 Details1PageLoad 304 05/09/2018 11:20:20
ЦЕЛЬ: найти количество Сбойных отправлений на user_id на ItemCode.Важно не смешивать коды элементов из неудачных и успешных представлений.Кроме того, может быть несколько записей ошибок одного и того же кода элемента.
Я не специалист по Redshift, особенно с его оконными функциями, но первой идеей, которую я попытался придерживаться, была функция LAG,Для того, чтобы сделать это, я намеревался идентифицировать последовательности ord_nums, которые можно было бы подсчитать, например,
ord_num event_type event_value user_id event_datetime error? sequence
1 PageLoad 124 03/09/2018 21:48:39
2 ItemCode LG56731 124 03/09/2018 21:48:53
4 Details1PageLoad 124 03/09/2018 21:48:56
8 PageLoad 124 03/09/2018 22:02:23
9 ItemCode GU07019 124 03/09/2018 22:02:32
10 ErrorResponse Some message 124 03/09/2018 22:02:32 1 8-9-10
51 PageLoad 228 04/09/2018 12:38:30
52 ItemCode EQ23487 228 04/09/2018 12:38:33
53 ErrorResponse Some message 228 04/09/2018 12:38:34 1 51-52-53
54 PageLoad 304 04/09/2018 15:43:14
55 ItemCode OB68102 304 04/09/2018 15:43:57
56 ErrorResponse Some message 304 04/09/2018 15:43:58 1 54-55-56
57 ItemCode PB68102 304 04/09/2018 15:44:21
58 ErrorResponse Some message 304 04/09/2018 15:44:22 1 54-57-58
59 PageLoad 304 05/09/2018 11:19:37
60 ItemCode OB68102 304 05/09/2018 11:20:17
62 Details1PageLoad 304 05/09/2018 11:20:20
Так, по user_id должны быть следующие значения:
user_id nr_failed_submissions
124 1
228 1
304 2
Однако, как видно из приведенного выше набора данных и ожидаемого результата, это не предсказуемо, сколько записей для перемещения назад, мне нужно дополнительное условие, которое не может быть помещено в LAG ...
Iперепробовал много вариантов, но ни один из них не подходит.
Очень полезные и проницательные сообщения были
, но до сих пор мне не удавалось объединить ихвсе в решение, которое будет работать.Должен быть способ сделать это в Redshift?