日期范围之间的 7 天平均值

7 day average between date range

我正在使用 SQL 服务器来解决以下问题:

我的 table T1 有以下数据:

Date         Id   Name   Rent   Number
01/01/2019    1    A      100    10
01/02/2019    1    A      200    30
01/03/2019    1    A      300    40
.
.
.
12/31/2019    1    A      150    25

存在 ID 和名称的不同组合的数据。我正在尝试查找 7 天的平均租金和人数:

最终输出

 Date                      Id   Name   Rent                   Number
 01/01/2019 - 01/07/2019   1    A      Avg(rent for 7 days)   Avg(Number for 7 days)
 01/08/2019 - 01/14/2019   1    A      Avg(rent for 7 days)   Avg(Number for 7 days)

The final data should be grouped by Id and Name

我的代码:

SELECT min(date), Id, Name,
    AVG(Rent) as Rent,
    AVG(Number) Number,
    AVG(AVG(Rent)) OVER (ORDER BY min(date) ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as AvgRent,
    AVG(AVG(Number)) OVER (ORDER BY min(date) ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as AvgNumber
FROM T1
WHERE date >= '2019-01-01'
AND date < '2019-12-31'
GROUP BY Id, Name

我的输出只有一行。

您需要按周对日期进行分组,您可以使用 DATEDIFF 函数找到“01/01/2019”和日期列之间的差异,然后将其除以 7。因为股息和除数是整数,商也是整数,将日期分组为数周。

SELECT   MIN(Date)   AS [Start Date]
       , MAX(Date)   AS [End Date]
       , Id
       , Name
       , AVG(Rent)   AS [Avg Rent]
       , AVG(Number) AS [Avg Number]
FROM     T1
GROUP BY DATEDIFF(DAY, '01/01/2019', Date) / 7;