【发布时间】: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
这有意义吗?任何帮助将不胜感激
【问题讨论】: