【问题标题】:7 day average between date range日期范围之间的 7 天平均值
【发布时间】:2019-08-12 21:06:56
【问题描述】:

我正在使用 SQL Server 解决以下问题:

我的表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 和 Name 的不同组合的数据。我正在尝试查找 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

我的输出只有一行。

【问题讨论】:

    标签: sql-server average date-range


    【解决方案1】:

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

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多