求用户30天内,60天内登录的次数

数据如下:
在这里插入图片描述
上面的数据是用户在张三登录的情况。

现在求用户在某一时间点前后60内登录的次数:

select name,
start_time,
count(*) over (partition by name order by cast(start_time as date) desc range between 60 preceding and 60 following) as sum_cnt
from table_name

结果如下图:
在这里插入图片描述
1、上面的SQL中,使用的是窗口函数中windons子句中的range关键值,使用range关键字,order by 后面的字段,必须是日期或者数字类型,上面的SQL中使用的类型是date类型,range between 60 preceding and 60 following 里面跟的数字就是日期,这里是60天。

**2、如果把日期改成bigint或者timestamps类型,例如:

select name,
start_time,
count(*) over (partition by name order by cast(start_time as timestamp) desc range between 60 preceding and 60 following) as sum_cnt
from table_name

, 那么这里面的60就代表是秒的意思,就是不是日期了,计算结果就错了。**

具体windows子句的使用方式,可参考:https://blog.csdn.net/Ahuuua/article/details/127136611

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值