用户行为间隔分析sql

简介: 用户行为间隔分析sql

需求:流量统计,将同一个用户的多个上网行为数据进行聚合,如果两次上网时间间隔小于10分钟,就进行聚合。


数据准备:

uid      start_time           end_time       num
1  2020-02-18 14:20:30  2020-02-18 14:46:30  20
1  2020-02-18 14:47:20  2020-02-18 15:20:30  30
1  2020-02-18 15:37:23  2020-02-18 16:05:26  40
1  2020-02-18 16:06:27  2020-02-18 17:20:49  50
1  2020-02-18 17:21:50  2020-02-18 18:03:27  60
2  2020-02-18 14:18:24  2020-02-18 15:01:40  20
2  2020-02-18 15:20:49  2020-02-18 15:30:24  30
2  2020-02-18 16:01:23  2020-02-18 16:40:32  40
2  2020-02-18 16:44:56  2020-02-18 17:40:52  50
3  2020-02-18 14:39:58  2020-02-18 15:35:53  20
3  2020-02-18 15:36:39  2020-02-18 15:24:54  30

分析:

 关键在正确分组
1,   2020-02-18 14:20:30,   2020-02-18 14:46:30,20    ,0   ,0
1,   2020-02-18 14:47:20,   2020-02-18 15:20:30,30    ,0   ,0
1,   2020-02-18 15:37:23,   2020-02-18 16:05:26,40    ,1   ,1
1,   2020-02-18 16:06:27,   2020-02-18 17:20:49,50    ,0   ,1
1,   2020-02-18 17:21:50,   2020-02-18 18:03:27,60    ,0   ,1
1:将end_time往下拉取一行,重新起个名字pre_end_time
2:pre_end_time-start_time<10,记为0用作标识,否则记为1,1即为变化的分割点
3:通过sum over() 将分割的段落再次转换,即可得到正确的可用于分组的标记,依此作为分组条件

sql实现:

WITH tmp as (
    SELECT
        uid,
        start_time,
        end_time,
        lag(end_time,1,null) over(partition by uid order by start_time) as pre_end_time
    FROM t
)
SELECT
    uid,
    min(start_time) as start_time,
    max(end_time) as end_time,
    sum(num) as amount
FROM
    (
        SELECT
            uid,
            start_time,
            end_time,
            num,
            sum(flag) over(partition by uid order by start_time rows between unbounded preceding and current row) as groupid
        FROM
            (
                SELECT
                    uid,
                    start_time,
                    end_time,
                    num,
                    if(unix_timestamp(start_time) - nvl(unix_timestamp(pre_end_time),unix_timestamp(start_time))< 10*60,0,1) as flag
                FROM tmp
            ) o1
    )o2
GROUP BY uid,groupid

结果展示:

 2020-02-18 14:20:30  2020-02-18 15:20:30  50
1  2020-02-18 15:37:23  2020-02-18 18:03:27  150
2  2020-02-18 14:18:24  2020-02-18 15:01:40  20
2  2020-02-18 15:20:49  2020-02-18 15:30:24  30
2  2020-02-18 16:01:23  2020-02-18 17:40:52  90
3  2020-02-18 14:39:58  2020-02-18 15:24:54  50
相关文章
|
1月前
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
3月前
|
前端开发 Java JSON
Struts 2携手AngularJS与React:探索企业级后端与现代前端框架的完美融合之道
【8月更文挑战第31天】随着Web应用复杂性的提升,前端技术日新月异。AngularJS和React作为主流前端框架,凭借强大的数据绑定和组件化能力,显著提升了开发动态及交互式Web应用的效率。同时,Struts 2 以其出色的性能和丰富的功能,成为众多Java开发者构建企业级应用的首选后端框架。本文探讨了如何将 Struts 2 与 AngularJS 和 React 整合,以充分发挥前后端各自优势,构建更强大、灵活的 Web 应用。
58 0
|
3月前
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
48 0
|
3月前
|
SQL 数据采集 算法
【电商数据分析利器】SQL实战项目大揭秘:手把手教你构建用户行为分析系统,从数据建模到精准营销的全方位指南!
【8月更文挑战第31天】随着电商行业的快速发展,用户行为分析的重要性日益凸显。本实战项目将指导你使用 SQL 构建电商平台用户行为分析系统,涵盖数据建模、采集、处理与分析等环节。文章详细介绍了数据库设计、测试数据插入及多种行为分析方法,如购买频次统计、商品销售排名、用户活跃时间段分析和留存率计算,帮助电商企业深入了解用户行为并优化业务策略。通过这些步骤,你将掌握利用 SQL 进行大数据分析的关键技术。
181 0
|
3月前
|
SQL 数据挖掘 BI
【超实用技巧】解锁SQL聚合函数的奥秘:从基础COUNT到高级多表分析,带你轻松玩转数据统计与挖掘的全过程!
【8月更文挑战第31天】SQL聚合函数是进行数据统计分析的强大工具,可轻松计算平均值、求和及查找极值等。本文通过具体示例,展示如何利用这些函数对`sales`表进行统计分析,包括使用`COUNT()`、`SUM()`、`AVG()`、`MIN()`、`MAX()`等函数,并结合`GROUP BY`和`HAVING`子句实现更复杂的数据挖掘需求。通过这些实践,你将学会如何高效地应用SQL聚合函数解决实际问题。
51 0
|
3月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
|
4月前
|
SQL 存储 大数据
SQL中DISTINCT关键字的使用与性能影响分析
SQL中DISTINCT关键字的使用与性能影响分析
|
6月前
|
SQL 数据挖掘 HIVE
【Hive SQL 每日一题】在线课程学生行为数据分析
该数据分析师任务是分析在线学习平台的学生行为,以优化课程内容和学习体验。提供的数据包括`students`表(含学生ID、姓名、年龄和性别)和`course_activity`表(含活动ID、学生ID、课程ID、活动日期和学习时长)。分析涉及:1) 学生参加的课程数量,2) 课程总学习时长,3) 按性别分组的平均学习时长,4) 学生首次参加的课程及日期,5) 学生最近一次学习的时长,以及6) 参与学生最多的课程。所有查询都使用了SQL,部分涉及窗口函数和分组统计。数据集可在给定链接下载。
65 2
|
6月前
|
SQL HIVE UED
【Hive SQL 每日一题】分析电商平台的用户行为和订单数据
作为一名数据分析师,你需要分析电商平台的用户行为和订单数据。你有三张表:`users`(用户信息),`orders`(订单信息)和`order_items`(订单商品信息)。任务包括计算用户总订单金额和数量,按月统计订单,找出最常购买的商品,找到平均每月最高订单金额和数量的用户,以及分析高消费用户群体的年龄和性别分布。通过SQL查询,你可以实现这些分析,例如使用`GROUP BY`、`JOIN`和窗口函数来排序和排名。
334 2
|
6月前
|
SQL 分布式计算 数据可视化
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析

热门文章

最新文章