对于mysql8.0之前无窗口函数求解连续多天登录用户数据

1、按照login_time去重,去掉一天内多次登录记录,然后用rnn模拟窗口函数的row_number
 select
        date_format(login_time,'%Y-%m-%d') as login_time,
        case
            when user_id = @last_user then @rn := @rn + 1
            else @rn := 1
            end as rnn,
        @last_user := user_id as user_id
 from (select distinct date_format(login_time,'%Y-%m-%d') as login_time,user_id from u_user_events as c) as a,
      (select @last_user := '', @rn := 0) as b
 order by user_id, login_time
2、多层嵌套后即可得出每个用户连续登录的天数记录
select user_id, count(*) as days_count from
(select date_format(login_time, '%Y-%m-%d') as login_time,
       case
           when user_id = @last_user then @rn := @rn + 1
           else @rn := 1
           end                             as rnn,
       @last_user := user_id               as user_id
from (select distinct date_format(login_time, '%Y-%m-%d') as login_time, user_id from u_user_events as c) as a,
     (select @last_user := '', @rn := 0) as b
order by user_id, login_time) as d
group by user_id,date_add(date_format(login_time,'%Y-%m-%d'),interval -rnn day)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 8.0引入了窗口函数的概念。窗口函数是一种特殊的函数,它可以在查询结果的每一行上进行计算,并返回一个结果集。窗口函数可以用于计算排名、累计和、移动平均等各种分析操作。 非聚合窗口函数是相对于聚合函数而言的。聚合函数是对一组数据进行计算后返回单个值,而非聚合函数一次只会处理一行数据。窗口聚合函数在行记录上计算某个字段的结果时,可以将窗口范围内的数据输入到聚合函数中,并不改变行数。\[2\] 在使用窗口函数时,可以使用PARTITION BY子句来指定窗口按照哪些字段进行分组。类似于GROUP BY分组,PARTITION BY子句的作用是将数据分成不同的组,窗口函数在每个分组上分别执行。如果省略了PARTITION BY,所有的数据将作为一个组进行计算。\[3\] 总之,MySQL 8.0引入的窗口函数提供了更灵活和强大的数据分析功能,可以在查询结果的每一行上进行计算,并返回相应的结果。 #### 引用[.reference_title] - *1* *2* *3* [【MySQL 8.0新特性】窗口函数](https://blog.csdn.net/weixin_51146329/article/details/127856341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值