SQL:用户计数的每日报告

Uza*_*ade 2 sql sql-server

我正在尝试获取 30 天的用户报告,它将返回日期用户总数作为该日期创建的计数,我使用此查询完成了此操作

 Select count(*)  As [Count] ,  
        (SELECT CONVERT(date, AddDate)) As [Date] 
 from Users 
 WHERE AddDate  >= (SELECT DateAdd(month, -1, Convert(date, GetDate()))) 
 Group By CONVERT(date, AddDate)
Run Code Online (Sandbox Code Playgroud)

它只给我创建任何用户的日期,但我想显示所有30 天,如果它的计数为 0

我想对月度报告做同样的事情。我正在获取创建用户的月份,现在我想将其更改为获取本月以来的最后 12 个月及其总用户数。为此,我正在使用这个查询

 Select count(*)  As [Count] ,
        (Select DATEPART( month , DateAdd( month , DATEPART(mm,AddDate) , -1 ) )) as Month
 from Users 
 WHERE AddDate  >= (SELECT DateAdd(YEAR, -1, Convert(date, GetDate())))
 Group By DATEPART(mm,AddDate)
Run Code Online (Sandbox Code Playgroud)

Joh*_*nHC 5

使用日历 CTE:

With NumberSequence ( Number ) as
(
    Select 1 as Number
    union all
    Select Number + 1
    from NumberSequence
    where Number <= 30
)
, CalendarCTE as
(
    select cast(dateadd(dd, -30 + Number,getdate()) as Date) as CalDate
    from Numbersequence
)

select CalDate, count(U1.*) as CountUsers
from CalendarCTE
left join Users U1
on CalDate = convert(date, U1.AddDate)
group by CalDate
Run Code Online (Sandbox Code Playgroud)