根据单独的数字列计算连续周数

Posted

技术标签:

【中文标题】根据单独的数字列计算连续周数【英文标题】: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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于根据单独的数字列计算连续周数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算bash中一列数据中的连续重复次数?

Python - 计算熊猫行字符串上的连续前导数字而不计算非连续数字

excel如何检查一列数字是不是连续

从表中选择连续范围

excel如何检查一列数字是不是连续?

(SQLite) 计算一个值连续重复 3 次的次数