首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据每个customerID的另一列中的值重置运行合计- SQL Server

根据每个customerID的另一列中的值重置运行合计- SQL Server
EN

Stack Overflow用户
提问于 2018-12-20 02:44:06
回答 2查看 270关注 0票数 -1

我已经尝试在这里寻找这个问题的答案,尽管我找到了类似的查询,但我还没有找到确切的答案。

我希望对客户获得某个分数的实例进行计数,如果他们得到的分数小于该分数,我希望该计数被重置。

这是我拥有的数据:

这是我想要产生的结果:

任何帮助,以及任何使用的高级代码的解释都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-20 03:46:52

您可以根据值小于阈值的次数来定义组。定义了每一组。在此之后,您需要一个行号:

代码语言:javascript
复制
select t.*,
       (case when t.score < 1 then 0
             else row_number() over (partition by t.customerId, grp, score order by t.attempt)
        end) as ranking
from (select t.*,
             sum(case when score < 1 then 1 else 0 end) over (partition by t.customerId order by t.attempt) as grp
      from t
     ) t;

Here是一个db<>fiddle。

票数 0
EN

Stack Overflow用户

发布于 2018-12-20 18:57:33

代码语言:javascript
复制
DECLARE @T table (CustomerID int, Attempt int, score decimal(10,2) )
INSERT INTO @T
VALUES
(111, 1, 1)
,(111, 2, 1)
,(111, 3, 1)
,(111, 4, 0.5)
,(111, 5, 1)
,(111, 6, 0)
,(222, 5, 0.5)
,(222, 6, 1)
,(222, 7, 0.5)
,(222, 8, 1)
,(222, 9, 1)
,(222, 110, 1)
select t.*,
   (case when t.score < 1 then 0
         else row_number() over (partition by t.customerId, grp order by t.attempt)
    end) as ranking
from (select t.*,
         sum(case when score < 1.00 then 1 else 0 end) over (partition by t.customerId order by t.attempt) as grp
  from @t t
 ) t;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53857418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档