如何查看不同值的时间点滚动五周计数?

rkttyhzu  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(256)

我正在努力寻找一个时间点,即连续五周计算不同员工的薪酬。例如,在第48周,我需要查看从第44周到第48周支付的不同员工的计数。我想我必须包括像“在第五周和第五周之间的第几周”这样的东西,但不知道如何使这个工作。输出应该只是年份、周数和不同雇员id的计数。

SELECT Week_Number,
    Year, 
Account, 
count(distinct EmployeeID as 'EmployeeCount'
FROM [Table]
GROUP BY Week_Number, Year, Account
r55awzrz

r55awzrz1#

我假设您有这样一个数据表:

YearNumber | WeekNumber | Account | EmployeeID
----------------------------------------------
2019       | 51         | 101     | 1         
2019       | 48         | 101     | 2

这就是你想看到的结果:

YearNumber | WeekNumber | Account | Quantity
----------------------------------------------
2019       | 48         | 101     | 1         
2019       | 49         | 101     | 1 
2019       | 50         | 101     | 1 
2019       | 51         | 101     | 2 
2019       | 52         | 101     | 2 
2020       | 1          | 101     | 1 
2020       | 2          | 101     | 1 
2020       | 3          | 101     | 1

因此,一个人在第48周开始付款,一个人在第51周,这意味着他们在101账户上的付款在第51周和第52周重叠,但在其他几周,只有一个人向该账户付款。
在评论中也要回答你的问题:我认为这是一个很好的方式来提供一个样本数据和预期的结果,当你这样问。
帮助我产生上述结果的查询:

SELECT 
    d.Year + IIF((d.Week + n.Number - 1) >= 52, 1, 0) AS Year, 
    (d.Week + n.Number - 1) % 52 + 1 AS Week,
    d.AccountID,
    COUNT(d.EmployeeID) AS Quantity
FROM Data d
CROSS APPLY (SELECT * FROM Number n WHERE Number BETWEEN 0 AND 4) n
GROUP BY
    d.Year + IIF((d.Week + n.Number - 1) >= 52, 1, 0),  -- Year
    (d.Week + n.Number - 1) % 52 + 1,  -- Week
    d.AccountID

这使用了一个数字表,它基本上是一个包含数字的表,在类似这样的查询中非常有用。代码也有一个最小的处理年轮,但请注意,您可能需要照顾数年包含53周。

相关问题