2016-08-24 73 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())))