Sql 基于单独的数字列计算连续周数
我正在解决一个问题,员工每周都会得到一定的分数。他们每周只有1分,每个星期六都会被保存下来。我想数一数连续超过50周(从今天开始向后计算)的数量。如果前一周不超过50周,则他们将有0个连续周。如果他们在过去的一年中每周得分超过50分,那么他们将连续52周得分 我已经尝试使用Row_Number()函数来获得这个结果,但不知道如何将分数作为一个因子加入其中 这是数据集的一个示例:Sql 基于单独的数字列计算连续周数,sql,tsql,Sql,Tsql,我正在解决一个问题,员工每周都会得到一定的分数。他们每周只有1分,每个星期六都会被保存下来。我想数一数连续超过50周(从今天开始向后计算)的数量。如果前一周不超过50周,则他们将有0个连续周。如果他们在过去的一年中每周得分超过50分,那么他们将连续52周得分 我已经尝试使用Row_Number()函数来获得这个结果,但不知道如何将分数作为一个因子加入其中 这是数据集的一个示例: EmpID Last Week Score A 7/6/2019 60 A 6
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
这有意义吗?任何帮助都将不胜感激我使用了条件聚合和运行total 基本思想是: 如果数字>=50,则派生列的和为0
连续零将在第一次使用条件聚合和运行总计时停止 基本思想是: 如果数字>=50,则派生列的和为0 连续零将在第一个点停止
('D','7/6/2019' , 51 )
('D','6/29/2019' , 49)
('D','6/22/2019' ,52 )
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