2016-04-14 37 views
2

我有一個表,稱爲測試,它是按時間排序的。sql查詢根據事件序列計數用戶數

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 

我必須找出有多少唯一的user_id存在於哪個事件e1發生在e2之前。這裏的答案是one with user_id 1.

我正在使用postgresql。 任何幫助將不勝感激。

回答

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

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