【发布时间】:2020-08-17 22:08:53
【问题描述】:
我正在尝试计算 SQL Server 数据库中多个字段的移动平均值,这些字段随着时间的推移涉及不规则间隔的值。我意识到对于定期间隔的数据,我可以使用SELECT grp, AVG(count) FROM t ... OVER (PARTITION BY grp ... ROWS 7 PRECEDING) 来创建前一周数据的移动平均值。但是,我的数据组织如下:
DATE GRP COUNT
2018-07-05 1 10
2018-07-08 1 4
2018-07-11 1 6
2018-07-12 1 6
2018-07-11 2 5
2018-07-15 2 10
2018-07-17 2 8
2018-07-20 2 10
...
对于大多数团体来说,某些日期没有观察到。我正在寻找的输出是:
DATE GRP MOVING_AVG
2018-07-05 1 10
2018-07-08 1 7
2018-07-11 1 6.67
2018-07-13 1 5.33
2018-07-11 2 5
2018-07-15 2 7.5
2018-07-16 2 7.67
2018-07-20 2 9.33
有没有办法在PRECEDING 子句中指定日期而不是行,还是我必须创建某种掩码来平均?
根据评论进行编辑以进行澄清
【问题讨论】:
-
你不能放一个
WHERE YEAR(Date) >= '2018' AND YEAR(Date) < '2019'吗? -
我需要它是一个移动平均线,特别是它之前 365 天的所有事件,所以我不能像那样硬编码一年。
-
然后你把它变成像
WHERE YEAR(Date) >= DATEADD(YEAR, -1, Date) AND YEAR(Date) < YEAR(Date)这样的列名。举个例子,很难理解你到底想要什么。至少给出样本输入和预期输出。 -
我认为下面的建议可能是我需要的,但我会编辑我的问题以更好地说明我所追求的。
标签: sql sql-server count average window-functions