0
我想查询一个事件数据库以确定用户的第一个事件,以及他们在第一个事件后触发的接下来的2个事件。数据库中的每个事件都有一个名字,时间戳和相关的用户:Redshift Postgres窗口函数 - 秩()
event_user event_time event_name
---------- ---------- ----------
some_id 1000 1st_event
some_id 1005 2nd_event
another_id 1003 1st_event
some_id 1010 3rd_event
another_id 1007 2nd_event
some_id 1015 4th_event
some_id 1100 5th_event
如果我做了以下内容:
SELECT event_user
, event_time
, rank() over (partition by event_user order by event_time asc) as rank
, event_name
, lead(event_name, 1) over (order by event_time) as event_2
, lead(event_name, 2) over (order by event_time) as event_3
FROM event_table
WHERE event_name = 'some_specific_event'
AND event_user = 'some_id'
我得到了用户的正确结果与“SOME_ID”:
event_user event_name event_time rank event_2 event_3
---------- ---------- ---------- ---- ------- -------
some_id 1st_event 1000 1 2nd_event 3rd_event
some_id 2nd_event 1005 2 3rd_event 4th_event
some_id 3rd_event 1010 3 4th_event 5th_event
....
我的目标是以此作为一个子查询来获得等级1的记录(前3个事件),每个用户:
SELECT * FROM (above query) WHERE query.rank = 1
但是,只要我删除指定用户的WHERE子句,结果就不正确; “下一个”事件不正确,我可以通过对任何特定用户运行查询来检查。感觉像rank()函数混合了event_times,但这是我第一次使用Window函数,所以我不确定如何解决它。
有什么建议吗?
我们能问你为什么MySQL的标记不具有任何的这些功能呢?建议使用 –
。 –
您可能想要显示一些示例输入。 –