问题描述
基本上每次得分低于 95% 时,它都会在第一周返回 Stage 1。如果它连续第二周低于 95%,它会返回第 2 阶段等等。但是,如果它高于 95%,计数器将重置为“良好”。然后如果低于 95% 等,则返回 Stage 1。
解决方法
您可以使用 row_number()
-- 但在根据每行 > 95% 的值的计数分配组后:
select t.*,(case when row_number() over (partition by grp order by month,week) = 1
then 'Good'
else concat('Stage ',row_number() over (partition by grp order by month,week) - 1)
end) as level
from (select t.*,countif(score > 0.95) over (order by month,week) as grp
from t
) t;
,
考虑以下
select * except(grp),(case when Average_score >= 95 and 1 = row_number() over grps then 'Good'
else format('Stage %i',row_number() over grps - sign(grp))
end) as Level
from (
select *,countif(Average_score >= 95) over (order by Month,Week) as grp
from `project.dataset.table`
)
window grps as (partition by grp order by Month,Week)
如果应用于您问题中的样本数据 - 输出为