Поэтому я переписал ваш запрос, чтобы он имел смысл, а также добавил фактический код, чтобы получить ваш пример.Я также добавил код, чтобы получить 1
, где среднее значение отсутствует или меньше 0
.Где-то там я сделал что-то, что заставило его работать именно так, как вы указываете, но я не знаю, где извините.
drop table if exists #table1
create table #table1 (d date, Product nvarchar(max), Cost float, AvgCost FLOAT)
insert into #table1 values ('20190407', 'ProdA', 3, null)
insert into #table1 values ('20190409', 'ProdA', 2, null)
insert into #table1 values ('20190410', 'ProdA', 4, null)
insert into #table1 values ('20190424', 'ProdA', 4, null)
insert into #table1 values ('20190430', 'ProdA', 1, null)
SELECT [d], Product, Cost, iif(isnull(oa.AvgCost, 0) < 1, 1, oa.AvgCost) as AvgCost
FROM [#table1] A
OUTER APPLY
(
SELECT AVG(A1.Cost) as AvgCost
FROM [#table1] as A1
WHERE A1.Product = A.Product
AND A1.d BETWEEN DATEADD(Day, -7, A.d)
AND DATEADD(DAY, -1, A.d)
) as oa
WHERE a.d BETWEEN '20190104' AND '20190430'
Результаты:
d Product Cost AvgCost
2019-04-07 ProdA 3 1
2019-04-09 ProdA 2 3
2019-04-10 ProdA 4 2.5
2019-04-24 ProdA 4 1
2019-04-30 ProdA 1 4