给定点击流拆分时间间隔

时间:2019-11-12 22:46:05

标签: sql postgresql datetime clickstream

我获得了带有字段的点击流 用户身份 , site_id, datetime-点击的时间戳记时间 会话会计算30分钟内的所有点击次数

如何使用输出

进行SQL查询
user_id    site_id    session_start_time    session_end_time

1 个答案:

答案 0 :(得分:0)

好的,假设您正在获取类似的数据

userid, siteid, datetime
1,      1,      2000-01-01 00:30
1,      1,      2000-01-01 01:00
1,      2,      2001-01-01 01:00
1,      2,      2001-01-01 01:30
2,      2,      2002-01-01 02:00
2,      2,      2002-01-01 02:30

并且您希望将上一行的日期作为开始,而将这一行的日期作为结束:

SELECT 
  userid,
  siteid,
  LAG(datetime) OVER(PARTITION BY siteid, userid ORDER BY datetime) as starttime, datetime as endtime 
FROM 
  table

userid, siteid, starttime,        endtime
1,      1,      null,             2000-01-01 00:30
1,      1,      2000-01-01 00:30, 2000-01-01 01:00
1,      2,      null,             2001-01-01 01:00
1,      2,      2001-01-01 01:00, 2001-01-01 01:30
2,      2,      null,             2002-01-01 02:00
2,      2,      2002-01-01 02:00, 2002-01-01 02:30

特定行x的每个日期将成为下一行x + 1的开始日期。分区意味着用户和站点ID具有自己的开始/结束日期。如果不希望这样做,请调整分区

隐藏空值:

WITH cte AS(
 SELECT 
  userid,
  siteid,
  LAG(datetime) OVER(PARTITION BY siteid, userid ORDER BY datetime) as starttime, datetime as endtime 
 FROM 
  table
)
SELECT * FROM cte WHERE starttime IS NOT NULL