【发布时间】:2019-05-02 23:13:12
【问题描述】:
我有一个如下所示的 SQL Server 2012 表:
Date Product Cost AvgCost
----------------------------------
4/7/2019 ProdA 3 NULL
4/9/2019 ProdA 2 NULL
4/10/2019 ProdA 4 NULL
4/24/2019 ProdA 4 NULL
4/30/2019 ProdA 1 NULL
我正在尝试根据以下条件计算 AvgCost 的值:
- 如果有过去 7 天或更少的行,则取这些天的“成本”的简单平均值
- 如果过去 7 天或更短时间内不存在任何行,则只需为 AvgCost 输入 1
代码:
SELECT [Date], Product, Cost, oa.AvgCost
FROM [Table1] A
OUTER APPLY
(SELECT AVG(A1.Cost) as AvgCost
FROM [Table1] A1
WHERE A1.Product = A.Product
AND A1.date BETWEEN DATEADD (Day, -6, DATEADD(DAY, -1, A.date))
AND DATEADD(DAY, -1, A.date)) oa
WHERE
a.date BETWEEN '04/1/2019' AND '04/30/2019'
代码似乎只有在恰好 7 天前有行时才有效
(例如:如果我有从 2019 年 4 月 1 日到 2019 年 4 月 7 日的行,我可以得到 2019 年 4 月 8 日的正确值)
预期结果:
Date Product Cost AvgCost
4/7/2019 ProdA 3 1 -- no rows exist for last 7 days or
-- less then 1
4/9/2019 ProdA 2 3 -- Only 1 rows exists for last 7 days or
-- less then average for that day
4/10/2019 ProdA 4 2.5 -- Average cost for 4/7 and 4/9
4/24/2019 ProdA 4 1 -- no rows exist for last 7 days or
-- less then 1
4/30/2019 ProdA 1 4 --Only 1 rows exists for last 7 days or
-- less then average for that day
实际结果
Date Product Cost AvgCost
4/7/2019 ProdA 3 NULL
4/9/2019 ProdA 2 NULL
4/10/2019 ProdA 4 NULL
4/24/2019 ProdA 4 NULL
4/30/2019 ProdA 1 NULL
【问题讨论】:
-
嘿,这只是一个仅供参考,对于我们这些美国以外的人来说,以美国格式查看日期实际上真的很混乱。如果您使用与位置无关的日期格式(例如“20190104”),您将对回答者产生更广泛的“吸引力”。
标签: sql-server variables dateadd