首先你只要两个数据,所以可将手机进行分组去重,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;