从sql中的timeseries数据构建邻接列表

o2gm4chl  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(334)

假设我在mysql数据库中有以下数据: table 时间戳
事件
会话\u id
例如,如果数据如下所示:

timestamp                 event         session_id
2014-01-01 01:01:02       Login         1234
2014-01-01 01:01:03       Like          1234
2014-01-01 01:01:05       Logout        1234

要得到这样的结果:

session_id       from_event        event            
1234             null              Login
1234             Login             Like
1234             Like              Logout

我想的是将事件作为有序数组:

select session_id, group_concat(event order by timestamp) 
from table 
group by session_id

但是从那里我不知道如何构建邻接列表(在sql中)。

flvlnr44

flvlnr441#

如果您运行的是mysql 8.0,那么只需使用window函数即可 lag() 要获取同一会话的“上一个”事件:

select
    session_id,
    lag(event) over(partition by session_id order by timestamp) from_event,
    event 
from mytable

在早期版本中,一种替代方法是关联子查询:

select
    session_id,
    (
        select t1.event 
        from mytable t1 
        where t1.session = t.session and t1.timestamp < t.timestamp
        order by t1.timestamp desc
        limit 1
    ) from_event,
    event
from mytable t

相关问题