zoukankan      html  css  js  c++  java
  • Oracle最大连续访问天数

    一个用户访问页面,页面可以返回继续访问(如A-B-C-A-B-A),求每个用户访问一个页面的最大连续天数,
    user_id      url        date
    001            A          2020-07-01 00:09:01
    001            B          2020-07-01 00:10:01
    001            B          2020-07-01 00:10:22
    001            A          2020-07-01 00:11:22
    001            B          2020-07-01 00:12:20
    001            A          2020-07-01 00:13:02
    002              ................................
    
    
    
    ..
    
    select e.user_id, e.url, max(ss)
      from (select d.user_id, d.url, d.cn, count(1) ss
              from (select c.*, c.dt - rn cn
                      from (select b.*,
                                   row_number() over(partition by b.user_id, b.url order by dt) rn
                              from (select distinct a.user_id,
                                                    a.url,
                                                    trunc(to_date(dt,
                                                                  'yyyy-mm-dd hh24:mi:ss')) dt
                                      from urlrecords a) b) c) d
             group by d.user_id, d.url, d.cn) e
     group by e.user_id, e.url
    
    
    
    网页日志记录表 urlrecord
    create table urlrecord
    (
    id string,
    url string,
    action string,
    )
    partitioned by(dt string);
    样例数据:
    id url action dt
    1   www.sohu.com         view      20201001 
    2   www.baidu.com        click     20201001 
    3   www.baidu.com        click     20201001 
    4   www.bilibili.com     click     20201001 
    5   www.sohu.com         click     20201002 
    6   www.qq.com           click     20201002 
    .. .. .. ..
    
    
    题目: 求该表中每天的url被点击(action='click')次数最多的top 5
    输出数据格式 dt,url,pv(点击总数),rank(排名)
    注意,如果有排名相同的,rank 排名取相同的值,后一位递增,比如 1 2 3 3 5 ,或者 1 2 3 4 5 5 等
    结果数据示例:
    
    dt url pv   rank
    20201001 www.58.com      3641   1 
    20201001 www.qq.com      3637   2 
    20201001 www.douban.com  3634   3 
    20201001 www.jd.com      3606   4 
    20201001 www.baidu.com   3574   5 
    20201001 www.youku.com   3574   5 
    20201002 www.jd.com      3643   1 
    
    
    
    select b.*, rank() over(partition by b.url, b.dt order by pv desc) rank
      from (select a.dt, a.url, count(1) pv
              from urlrecord a
             where a.action = 'click'
             group by a.url, a.dt) b
    

      

  • 相关阅读:
    Linux常用命令
    Docker常用命令
    Google操作
    JAVA实现动态二维码输出
    JAVA IDEA Debug设置
    JAVA下载https资源图片
    Nginx配置文件常用操作
    Docker安装(Ubuntu、CentOS)
    SpringBoot启动脚本
    Tomcat——tomcat配置文件方式部署项目
  • 原文地址:https://www.cnblogs.com/zhanglin123/p/15060750.html
Copyright © 2011-2022 走看看