我正在尝试获取 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)
使用日历 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)