当前位置: 首页 > news >正文

SQL面试题挑战11:访问会话切割

目录

  • 问题:
  • SQL解答:

问题:

如下为某电商公司用户访问网站的数据,包括用户id和访问时间两个字段。现有如下规则:如果某个用户的连续的访问记录时间间隔小于60秒,则属于同一个会话,现在需要计算每个用户有多少个会话。比如A用户在第1秒,60秒,200秒,230秒有三次访问记录,则该用户有2个会话,其中第一个会话是第1秒和第60秒的记录,第二个会话是第200秒和230秒的记录。


user_id     ts
1001    16920000000
1001    16920000050
1002    16920000065
1002    16920000080
1001    16920000150
1002    16920000160

SQL解答:

先按用户分组、时间排序后取每行数据的前一行的时间,然后判断当前行的时间与前一行时间的差值,看是否在给定的范围内,然后再做开窗累加就可以得到每个用户不同的会话编号了。思路如下图:

user_idts判断与上一行差值是否小于60开窗累加当做会话编号
A100
A6000
A20011
A23001
with tmp as (select 1001 as user_id,16920000000 as tsunion allselect 1001 as user_id,16920000050 as tsunion allselect 1002 as user_id,16920000065 as tsunion allselect 1002 as user_id,16920000080 as tsunion allselect 1001 as user_id,16920000150 as tsunion allselect 1002 as user_id,16920000160 as ts
)selectuser_id,count(distinct user_group) as user_group_cnt
from
(selectuser_id,ts-- 开窗做累加,sum(flag) over(partition by user_id order by ts) as user_groupfrom(
selectuser_id,ts-- 判断当前行的时间与上一行的差值,if(ts-last_ts<60,0,1) as flagfrom(
selectuser_id,ts-- 取当前行的上一个时间,没有上一行就给自身的时间,lag(ts,1,ts) over(partition by user_id order by ts) as last_tsfrom tmp
)t1
)t1
)t1
group by user_id;
http://www.lryc.cn/news/269128.html

相关文章:

  • 2023“楚怡杯”湖南省赛“信息安全管理与评估“--应急响应(高职组)
  • 【Python百宝箱】Python引领制造变革:CAM技术全景解析与实战指南
  • 【新版Hi3559AV100 旗舰8K30 AI摄像机芯片】
  • 小样本学习idea(不断更新)
  • 表情包搜索网站
  • Linux账号和权限管理
  • Qt/QML编程学习之心得:QML和C++的相互调用(十五)
  • 月入10.5K,专科小伙转行网优:据说每个领域都有一个“显眼包”
  • Python自动化测试:选择最佳的自动化测试框架
  • Ubuntu16.04 安装Anaconda
  • MR实战:统计总分与平均分
  • Redux与React环境准备、实现counter(及传参)、异步获取数据
  • 网站服务器被入侵,如何排查,该如何预防入侵呢?
  • 应用在网络摄像机领域中的国产音频ADC芯片
  • Unity3D 安装和下载指南及汉化
  • 【SpringCache】SpringCache详解及其使用,Redis控制失效时间
  • MyBatis的基本使用及常见问题
  • [RoarCTF2019] TankGame
  • 相比于其他流处理技术,Flink的优点在哪?
  • react中使用ref属性获取元素,并判断该元素内是否含有子元素
  • idea 如何快速拉取新分支
  • 【经验分享】日常开发中的故障排查经验分享(一)
  • 关于Unity使用图片字体示例
  • 开源大语言模型简记
  • python高级代码
  • 透彻掌握GIT基础使用
  • 二、类与对象(三)
  • CentOS 7 Tomcat服务的安装
  • 文件夹共享功能的配置 以及Windows server2012防火墙的配置
  • 前端使用高德api的AMap.Autocomplete无效,使用AMap.Autocomplete报错