【问题标题】:Select count of consecutive events based on time column根据时间列选择连续事件的计数
【发布时间】:2020-07-02 15:00:01
【问题描述】:

这是我的数据:

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 的数量紧跟在event2 之后(基于event_time

有了上面的数据,输出将是:

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

我还看到了检查连续值的其他答案 (Count Number of Consecutive Occurrence of values in Table),但我无法使其适应我的用例

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    使用 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 
    

    请参阅demo
    结果:

    | app_id | count |
    | ------ | ----- |
    | 1      | 3     |
    | 2      | 1     |
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      相关资源
      最近更新 更多