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



我试图看到时间点滚动五周的不同员工支付。 例如,在第 48 周,我需要查看第 44 周到第 48 周支付的不同员工的数量。 我想我必须包括类似"WHERE Week_Number 在 Week_Number -5 和 Week_Number 之间"之类的内容,但不确定如何完成这项工作。 输出应仅为不同员工 ID 的年、周数和计数。

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

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

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 周重叠,但在其他几周,只有一个人向帐户付款。

还要在评论中回答您的问题:我认为这是在您询问 SO 时提供示例数据和预期结果的好方法。


帮助我产生上述结果的查询:

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 周的年份

最新更新