我有一个名为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。 任何帮助将非常感激。
答案 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