На самом деле, ваше среднее значение вычисляется по последним 171 скользящим последним строкам, поэтому оно меняется для каждой строки.
Я думаю, что вам нужен фильтр для даты в * Предложение 1005 * и OVER()
без ORDER BY
:
SELECT
ID,
Cluster,
Date,
Price,
AVG(Price) OVER (PARTITION BY Cluster) As ClusterAverage
FROM tblCluster
WHERE
LEN(ID) = 9
AND ID NOT LIKE '%[^a-Z0-9]%'
AND Cluster in ('430.00')
AND Date > DATEADD(day, 171, getdate())
Если вам требуется более детальный контроль за диапазоном дат, по которому вычисляется среднее значение, вы также можете использовать условное агрегирование:
SELECT
ID,
Cluster,
Date,
Price,
AVG(CASE WHEN Date > DATEADD(day, 10, getdate()) THEN Price END)
OVER (PARTITION BY Cluster) As ClusterAverageLast10Days,
AVG(CASE WHEN Date > DATEADD(day, 20, getdate()) THEN Price END)
OVER (PARTITION BY Cluster) As ClusterAverageLast20Days,
AVG(Price) OVER (PARTITION BY Cluster) As ClusterAverageOverall
FROM tblCluster
WHERE
LEN(ID) = 9
AND ID NOT LIKE '%[^a-Z0-9]%'
AND Cluster in ('430.00')
AND Date > DATEADD(day, 171, getdate())