2014-10-07 86 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)