【问题标题】:SQL Last Three MonthsSQL 最近三个月
【发布时间】:2014-10-07 09:22:34
【问题描述】:

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

我想更改它,以便现在是 10 月,它不会计算 10 月的数据,而是计算 7 月到 9 月的数据,当我们进入 11 月时更改为 8 月到 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

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

【问题讨论】:

    标签: sql sql-server reporting


    【解决方案1】:
    WHERE  LastLoggedIn >= DATEADD(month, DATEDIFF(month, 0, GETDATE())-3, 0)
     AND   LastLoggedIn <  DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
    

    上述语句将返回 7 月至当月开始之前的所有结果。

    【讨论】:

      【解决方案2】:

      参考这个答案来获得当月的第一天:

      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) 
      

      【讨论】:

        【解决方案3】:

        使用 BETWEEN 怎么样?

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-17
          • 1970-01-01
          • 1970-01-01
          • 2021-09-08
          • 2011-03-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多