计算范围内每天的最近7天

时间:2016-05-31 17:27:20

标签: sql sql-server

我的表格(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的平均价格

2 个答案:

答案 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