首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定时间间隔内的点击流拼接

给定时间间隔内的点击流拼接
EN

Stack Overflow用户
提问于 2019-11-13 06:46:05
回答 1查看 50关注 0票数 1

我得到一个点击流,其中包含字段user_id、site_id、datetime -时间戳点击会话的时间统计30分钟间隔内的所有点击次数

如何使用以下输出进行SQL查询

代码语言:javascript
复制
user_id    site_id    session_start_time    session_end_time
EN

回答 1

Stack Overflow用户

发布于 2019-11-13 07:09:17

好的,假设你得到了一些数据,比如

代码语言:javascript
复制
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

您希望将前一行中的日期设为开始日期,将此行中的日期设为结束日期:

代码语言:javascript
复制
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有自己的开始/结束日期。如果这不是故意的,请调整分区

要隐藏空,请执行以下操作:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58827824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档