目录
1.连续问题
如下数据为蚂蚁森林中用户领取的减少碳排放量,找出连续 3 天及以上减少碳排放量在 100 以上的用户
思路:
- 先查出每个人单日减少的碳排放量>100的
- 将用户每日减少的碳排放量进行开窗排名
- 等差数列法思路:日期1,2,3,4。我们在旁边再来一个2,3,4,5。每一个日期和旁边的值相差1。如果旁边的值是2,3,5,6。则表示前两个日期是连续,第三个开始不连续。
#4.当数量>3,表示连续3天排放大于100
select id,flag,count(*) ct
from
#3.等差数列:将每天的日期值-排序值。如果连续三天排放大于100,那么该用户每天都有flag,且值每天相同
(select id,dt,lowcarbon,date_sub(dt,rk) flag
from
#2.开窗,根据日期排序,将每天减排量大于100的人的数据排列下来。日期增加一天,排序+1
(select id,dt,lowcarbon,rank() over (partition by id order by dt) rk
from
#1.找出一天减排量>100的人,有几天会查出几条数据
(select id,dt,sum(lowcarbon) lowcarbon from test1 grou