Выберите количество последовательных событий на основе столбца времени - PullRequest
2 голосов
/ 21 марта 2020

Вот мои данные:

app_id  event_type  event_time
1       event1      2020-22-03 04:05:03
1       event3      2020-22-03 04:05:04
1       event2      2020-22-03 04:05:05
1       event3      2020-22-03 04:05:10
1       event1      2020-22-03 04:05:11
1       event2      2020-22-03 04:05:12
2       event3      2020-22-03 04:05:04

Я хочу посчитать сумму двух событий для каждого app_id:

  1. Количество event3
  2. Число event1, за которым сразу следует (на основе event_time) event2

. При данных выше, результат будет:

app_id  count
1       3 <--- (2 * event3 + event1 followed by event2)
2       1

Число event3 можно рассчитать с помощью:

SELECT app_id,
    count(event_type = 'event3')
    FROM test_table
    GROUP BY app_id;

Для второго счета, я думаю, данные должны быть GROUP BY app_id в сочетании с ORDERBY event_time

Я также видел другие ответы для проверка последовательных значений ( Количество последовательных вхождений значений в таблице ), но я не смог адаптировать его к своему варианту использования

1 Ответ

2 голосов
/ 21 марта 2020

Используйте CTE, где вы преобразуете 2 условия в целые числа 0 или 1, которые затем будут агрегированы:

WITH cte AS (
  SELECT *, 
    (event_type = 'event3')::int is_event3,
    (event_type = 'event1' AND LEAD(event_type) OVER (PARTITION BY app_id ORDER BY event_time) = 'event2')::int is_event1_event2
  FROM test_table   
)  
SELECT app_id, SUM(is_event3 + is_event1_event2) "count"
FROM cte
GROUP BY app_id 

См. Демонстрационную версию . Результаты:

| app_id | count |
| ------ | ----- |
| 1      | 3     |
| 2      | 1     |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...