2016-08-24 72 views
0

我目前正在撰寫一個查詢,該數據會爲我提供上週的數據(讓我們假設爲「SALES」)和上一年同一週的數據。這是我要得到最後幾周的數據,它工作正常:上週的年度數據

Set DATEFIRST 1 
Select DATEPArt(dd, DateAdded) AS 'Day of the Month', 
     count(*)AS 'Number of Users' 
from TABLE1 
Where DateAdded >= dateadd(day, -(datepart(dw, getdate()) + 6), CONVERT(date,getdate())) 
    AND DateAdded < dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) 
Group by DATEPArt(dd, DateAdded) 
Order by 'Day of the Month' 

現在我想補充另一列,這將使我在同一個星期過去幾年的數據。這是我在想:

Set DATEFIRST 1 
Select DATEPArt(dd, DateAdded) AS 'Day of the Month', 
     count(*)AS 'Number of Users' 
from TABLE1 
Where DateAdded >= DATEADD(yy,DATEDIFF(yy,0,GETDATE())-1,0) 
    AND DateAdded < DATEADD(yy,DATEDIFF(yy,0,GETDATE())+1,0) 
    AND DateAdded >= dateadd(day, -(datepart(dw, getdate()) + 6), CONVERT(date,getdate())) 
    AND DateAdded < dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) 
Group by DATEPArt(dd, DateAdded), DateAdded 
Order by 'Day of the Month' 

問題是,我仍然得到最後一週的數字(今年,我需要它是去年)。這導致我相信錯誤必須在某處:

DateAdded >= DATEADD(yy,DATEDIFF(yy,0,GETDATE())-1,0) 
AND DateAdded < DATEADD(yy,DATEDIFF(yy,0,GETDATE())+1,0) 

我很感謝大家的幫助!

回答

1

你正在尋找一個OR條件

WHERE (DateAdded >= DATEADD(yy,DATEDIFF(yy,0,GETDATE())-1,0) 
    AND DateAdded < DATEADD(yy,DATEDIFF(yy,0,GETDATE())+1,0)) 

OR (DateAdded >= dateadd(day, -(datepart(dw, getdate()) + 6), CONVERT(date,getdate())) 
    AND DateAdded < dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())))