【问题标题】:Counting Consecutive Weeks based on separate numeric column根据单独的数字列计算连续周数
【发布时间】:2019-07-10 21:31:48
【问题描述】:

我正在解决员工每周获得一定分数的问题。他们每周只有 1 分,每周六被保存。我想计算他们超过 50 的连续周数(从今天开始向后计算)。如果前一周不超过 50,那么他们将连续 0 周。如果他们在过去一年中每周的得分都在 50 以上,那么他们将连续 52 周。

我已尝试使用 Row_Number() 函数来获取此值,但无法弄清楚如何将分数作为其中的一个因素。

这是数据集的一个例子:

EmpID  Last Week  Score   
A      7/6/2019   60   
A      6/29/2019  84   
A      6/22/2019  21    
B      7/6/2019   41    
B      6/29/2019  92    
C      7/6/2019   77    
C      6/29/2019  55    
C      6/22/2019  71    
C      6/15/2019  63    

这是我迄今为止尝试过的

SELECT
    EmpID,
    EOW,
    SCORE,
    ROW_NUMBER() OVER(PARTITION BY EMP ORDER BY EOW DESC) AS RN
FROM a
ORDER BY EmpID, EOW DESC

但这只会给我每个员工的行数。当他们的分数低于 50 时,我需要停止计数,如下所示:

EmpID  Last Week  Score   RN
A      7/6/2019   60      1
A      6/29/2019  84      2
A      6/22/2019  21      -
B      7/6/2019   41      -
B      6/29/2019  92      -
C      7/6/2019   77      1
C      6/29/2019  55      2
C      6/22/2019  71      3
C      6/15/2019  63      4

然后,我需要为每个员工获取一个连续周数,以便我可以将结果加入到更大的查询中,该查询会提取有关该员工的其他信息。分数在另一个表中,这就是我必须加入它的原因。查询应产生如下结果:

EmpID  Last Week    Consecutive Week
A      7/6/2019     2
B      7/6/2019     0
C      7/6/2019     4

这有意义吗?任何帮助将不胜感激

【问题讨论】:

    标签: sql tsql


    【解决方案1】:

    我使用了条件聚合和运行总计。

    基本思路是:

    如果数字 >= 50,则派生列的总和为 0。

    连续的零将在第一个

    然后数零的个数。

    我添加了特殊情况[D组]:

    ('D','7/6/2019'  , 51 )   
    ('D','6/29/2019' , 49)   
    ('D','6/22/2019'  ,52 ) 
    

    在这种情况下会有一个零。

    如果只有一个零,我认为连续几周应该是零而不是一。

    我在测试样本中添加了[D组]。

    试试这个:

    SELECT B.EmpID,B.[Last Week], CASE WHEN B.TOTAL <= 1 THEN 0 ELSE B.TOTAL END AS RN
    FROM (
    SELECT A.EmpID, MAX(EOW) AS [Last Week], SUM(CASE WHEN A.COUNT1 = 0 THEN 1 ELSE 0 END) AS TOTAL
    FROM
    (
    SELECT EMPID,EOW, Score
    , SUM(CASE WHEN SCORE >= 50 THEN 0 ELSE 1 END) OVER (PARTITION BY EMPID ORDER BY EOW DESC) AS COUNT1
    FROM TEST
    GROUP BY EMPID,EOW,Score
    )A
    GROUP BY A.EmpID
    )B
    

    测试结果:

    DB<>Fiddle

    【讨论】:

      猜你喜欢
      • 2021-06-13
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 2020-02-19
      • 2017-09-30
      相关资源
      最近更新 更多