我的表格(products
)如下:
id, productId, price, saleDate
我想构建一个针对特定productId
的查询,并且特定数据范围将返回该范围内每天的最近7天的平均价格。
以下查询将为我提供1/1/16和02/01/16之间特定productId的所有数据
SELECT * FROM products WHERE productId='PS54434' AND saleDate BETWEEN '2016-01-01' AND '2016-02-01'
但是我希望每天01/01/16至2016年1月1日我将收到过去7天 所以对于数据01/01/16我将收到12/26 / 16-01 / 01/16的平均价格
答案 0 :(得分:1)
尝试以下查询:
SELECT p.id, p.productid, p.saleDate, oa.avgPriceLast7Days
FROM products p
OUTER APPLY (
SELECT AVG(d.price) AS avgPriceLast7Days
FROM products d
WHERE d.productid = p.productid
AND d.saleDate BETWEEN DATEADD(DAY, -7, p.saleDate) AND p.saleDate
) oa
WHERE p.productId='PS54434'
AND p.saleDate BETWEEN '2016-01-01' AND '2016-02-01'
答案 1 :(得分:0)
一种方法是使用循环。您声明开始日期并从该日期开始返回7天,并获得该日期范围的平均价格。然后添加1天并重复该过程。如果您需要将所有结果作为表格,请创建临时表并存储每次迭代的结果。
declare @startdate date = '2016-01-01';
create table #tmpavgprice (price numeric(10,2));
while @startdate <= '2016-02-01'
begin
SELECT avg(price)
INTO #tmpavgprice
FROM products
WHERE productId='PS54434'
AND saleDate BETWEEN dateadd(dd,-7,@startdate) AND @startdate;
set @startdate = select dateadd(dd,1,@startdate);
end;
select * from #tmpavgprice; --to get the final result