SQL—相邻间隔问题

该博客探讨如何在SQL中计算用户在网站上相邻两次浏览时间的间隔,如果间隔小于3分钟的次数。通过使用窗口函数ROW_NUMBER()对用户时间进行排序,并通过LEFT JOIN找到相邻记录,然后应用TIMESTAMPDIFF函数检查时间差,最终按用户ID分组计数。
摘要由CSDN通过智能技术生成

<题目>

给定一张用户浏览时间表user_pv_time,表中包含两个字段,分别是用户【user_id】和用户访问时间【user_time】

<问题>

求每个用户相邻两次浏览时间之差小于3min的次数

<解题思路>

思路一:

既然是求每个用户XX,最后一定要按照用户id进行分组;又要求是相邻两次浏览时间,所以要对每个用户的浏览时间排序号,利用序号的差值为1即可判断是相邻;

SELECT a.user_id, COUNT(*) AS pv_count
FROM (SELECT user_id, user_time, 
	     ROW_NUMBER() OVER (partition by user_id
			        order by user_time) AS rn
             FROM user_pv_time) AS a
LEFT JOIN (SELECT user_id, user_time, 
	          ROW_NUMBER() OVER (partition by user_id
			             order by user_time) AS rn
           FROM user_pv_time) AS b
ON a.user_id = b.user_id 
WHERE  CAST(b.rn AS signed) - CAST(a.rn AS signed) = 1 
AND TIMESTAMPDIFF(MINUTE, a.user_time, b.user_time) < 3
GROUP BY user_id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值