2014-10-07 155 views
0

我已经写了SQL来选择过去三个月的用户数据,但我认为目前它每天都会更新。SQL最近三个月

我想改变它,这样它现在是10月,将不计入10月的数据,而是七月份到九月数据更改为八月到十月,当我们移动到十一月

这是我得到的SQL目前:

declare @Today datetime 
declare @Category varchar(40) 
set @Today = dbo.udf_DateOnly(GETDATE()) 

set @Category = 'Doctors active last three months updated'   
declare @last3monthsnew datetime 
set @last3monthsnew=dateadd(m,-3,dbo.udf_DateOnly(GETDATE()))   
delete from LiveStatus_tbl where Category = @Category   


    select @Category, count(distinct U.userid)   
    from UserValidUKDoctor_vw U   
    WHERE LastLoggedIn >= @last3monthsnew 

我该如何编辑它来做到这一点?

回答

2
WHERE LastLoggedIn >= DATEADD(month, DATEDIFF(month, 0, GETDATE())-3, 0) 
AND LastLoggedIn < DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) 

以上声明将在7月份返回到当前月份开始之前的任何结果。

0

引用这个答案获得该月的第一天:

How can I select the first day of a month in SQL?

您可以检测到一个月的限制,像这样:

select DATEADD(month, DATEDIFF(month, 0, getdate()) - 3, 0) AS StartOfMonth 
select DATEADD(month, DATEDIFF(month, 0, getdate()), 0) AS EndMonth 

然后你就可以添加到变量或直接加入您的WHERE条款:

declare @StartDate datetime 
declare @EndDate datetime 

set @StartDate = DATEADD(month, DATEDIFF(month, 0, getdate()) - 3, 0) 
set @EndDate = DATEADD(month, DATEDIFF(month, 0, getdate()), 0) 

select @Category, count(distinct U.userid)   
from UserValidUKDoctor_vw U   
where LastLoggedIn >= @StartDate AND LastLoggedIn < @EndDate 

或者:

select @Category, count(distinct U.userid)   
from UserValidUKDoctor_vw U   
where LastLoggedIn >= DATEADD(month, DATEDIFF(month, 0, getdate()) - 3, 0) 
    and LastLoggedIn < DATEADD(month, DATEDIFF(month, 0, getdate()), 0) 
0

如何使用BETWEEN?

WHERE LastLoggedIn 
BETWEEN 
DATEADD(month, DATEDIFF(month, 0, GETDATE())-3, 0) 
AND 
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)