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

Sql 我如何看到时间点滚动五周计数的不同值?,sql,sql-server,Sql,Sql Server,我正试图看到一个时间点:连续五周计算不同的员工薪酬。例如,在第48周,我需要查看在第44周到第48周支付的不同员工的数量。我想我必须包括一些类似“Week_Number在Week_Number-5和Week_Number之间的位置”的内容,但我不确定如何才能做到这一点。输出应该是不同员工ID的年份、周数和计数 SELECT Week_Number, Year, Account, count(distinct EmployeeID as 'EmployeeCount' FROM [Ta

我正试图看到一个时间点:连续五周计算不同的员工薪酬。例如,在第48周,我需要查看在第44周到第48周支付的不同员工的数量。我想我必须包括一些类似“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周重叠,但在其他几周,只有一个人向该账户付款

同时回答你在评论中的问题:我认为,这是一个很好的方式,可以在你提问时提供样本数据和预期结果


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

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

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

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

请提供示例数据、所需结果和适当的数据库标记。日期函数是特定于产品的。此外,如果您选择,通读,然后写下您要创建的详细问题,您将在这里有更好的体验。看看有什么建议。谢谢大家!对不起,我显然是个新手。提供样本数据和期望结果的最佳方式是什么?请提供样本数据、期望结果和适当的数据库标记。日期函数是特定于产品的。此外,如果您选择,通读,然后写下您要创建的详细问题,您将在这里有更好的体验。看看有什么建议。谢谢大家!对不起,我显然是个新手。提供样本数据和期望结果的最佳方式是什么?