首页 > 解决方案 > SQL,如何选择某个值后的所有后续记录;按用户 ID

问题描述

我有一张桌子,看起来像这样:

user_id | event_id | action
--------+----------+--------
user_1  | 1        | view 
user_1  | 2        | enter
user_1  | 3        | sign_up
user_1  | 4        | view
user_2  | 1        | view
user_2  | 2        | sign_up
user_2  | 3        | enter
user_2  | 4        | view

因此,event_id它与用户相关联,遵循事件发生时的顺序。

我在这里试图实现的目标:我想看看用户在完成“sign_up”事件后他们还会做什么。

我需要选择不同的action= 'sign_up'之后的所有行user_id

我正在测试的查询有问题:

SELECT *
FROM TABLE
WHERE event_id >= (
  SELECT event_id
  FROM table
  WHERE action = 'sign_up'
  ORDER BY event_id ASC
  LIMIT 1
)

这将简单地取出event_id= 1 并应用于所有用户。

有什么建议么?

谢谢

标签: sql

解决方案


您需要一个共同相关的子查询,以便为每个 user_id 分别评估子查询:

SELECT t1.*
FROM the_table t1
WHERE event_id >= (SELECT event_id 
                   from the_table t2
                   where t2.action = 'sign_up' 
                     and t2.user_id = t1.user_id
                   ORDER BY EVENT_ID ASC
                   limit 1 )

推荐阅读