2016-05-31 96 views
0

我的表(products)是如下:計算過去7天,每天在範圍

id, productId, price, saleDate 

我想建立一個查詢,具體productId和具體的數據範圍將返回價格的平均水平該範圍內每天的最後7天。

以下查詢會給我所有的數據,具體的productId 16年1月1日和16年2月1日之間

SELECT * FROM products WHERE productId='PS54434' AND saleDate BETWEEN '2016-01-01' AND '2016-02-01' 

,但我想,對於每16年1月1日一天,直到02/01/16我將收到最後7天 所以對於數據01/01/16我將收到12/26/16-01/01/16價格的平均值

+0

什麼版本的SQL Server? – RBarryYoung

回答

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 
+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' 
+0

注意:我認爲'saleDate'列的數據類型是'DATE'。 –