sql查询根据事件序列计算用户数

时间:2016-04-14 08:46:32

标签: postgresql

我有一个名为test的表,按时间排序。

 user_id  event      time
    1       e1         t1
    1       e3         t2
    1       e2         t3
    2       e2         t4
    2       e1         t5
    2       e5         t6
    3       e2         t7
    3       e4         t8

我必须找出在e2之前e1发生的事件e1中有多少唯一user_id。这里的答案是one,其中user_id为1。

我正在使用postgresql。 任何帮助将非常感激。

2 个答案:

答案 0 :(得分:0)

这可能是您的解决方案,其中包含ev2

的事件的子选择
WITH event(user_id,event,time) AS (
      VALUES (1,'e1','t1'),
             (1,'e3','t2'),
             (1,'e2','t3'),
             (2,'e2','t4'),
             (2,'e1','t5'),
             (2,'e5','t6'),
             (3,'e2','t7'),
             (3,'e4','t8'))
SELECT count(event.event) FROM event
JOIN (SELECT user_id, time
FROM event WHERE event = 'e2') AS ev2 ON event.user_id = ev2.user_id
WHERE event.time < ev2.time AND event.event = 'e1'

ev2发生之前过滤所有行,其值应等于ev1

答案 1 :(得分:0)

SELECT e.user_id, 
       Count(e.event) 
FROM   event e 
       join(SELECT user_id, 
                   TIME 
            FROM   event 
            WHERE  event = 'e2') AS ee 
         ON e.user_id = ee.user_id 
WHERE  e.TIME < ee.TIME 
       AND e.event = 'e1' 
GROUP  BY e.user_id