遇到一道SQL题,大伙看看怎么解

img

首先你只要两个数据,所以可将手机进行分组去重,group by a,b 另外最后的结果只要类型等于1的快充,剩下的就是求连续的最多的次数,可以参考一下这篇文章

先做个分组排序,手机id分组时间排一个序号12345,再过滤快充做个分组排序出一个序号1234,两个关联,序号相减的值按手机id统计个数,最大的就是连续最大次数

小鹏汽车的原题吧

select t3.vcl_id     , nvl(max(if(t2.cnt = 1, 0, cnt)), 0) as max_cnt -- 最大次数,连续 1 次不称之为连续,记为 0from (select vcl_id from tbl group by vcl_id) t3 -- 车辆维度         left join (    select vcl_id         , tp         , rn1 - rn2 as rn_group -- 间距         , count(1)  as cnt      -- 间距出现的次数    from (select vcl_id               , tm               , tp               , row_number() over (partition by vcl_id order by tm asc )   as rn1               , row_number() over (partition by vcl_id,tp order by tm asc)    as rn2          from tbl t  -- 明细事实表          order by vcl_id, rn1, rn2         ) t1    group by vcl_id,             tp,             rn1 - rn2) t2                   on t3.vcl_id = t2.vcl_id                       and t2.tp = 1 --- 连续快充group by t3.vcl_id;