SQL 个活跃用户(按月)

SQL active users by month

我想知道每月的活跃用户数,我使用 SQL Server 2017。

我有一个 AuditLog table 像:

- UserID: int
- DateTime: datetime
- AuditType: int

UserID  DateTime     AuditType
------------------------------
1       2022-01-01   1
1       2022-01-15   4
1       2022-02-20   3
2       2022-01-10   8
2       2022-03-10   1
3       2022-03-20   1

如果某人在给定月份至少有一个条目,则 he/she 被视为活跃。 我想要这样的结果:

Date     Count
2022-01  2
2022-02  1
2022-03  2

我认为您可以将 GROUP BY 中的函数 Month(datetime) 与计数函数 SELECT COUNT(UserID)

结合使用
SELECT (CAST(YEAR(C.DATE)AS CHAR(4))+'-'+CAST(MONTH(C.DATE)AS CHAR(2)))YEAR_MONTH,COUNT(C.USER_ID)CNTT
FROM AUDITLOG AS C
GROUP BY (CAST(YEAR(C.DATE)AS CHAR(4))+'-'+CAST(MONTH(C.DATE)AS CHAR(2)))
ORDER BY (CAST(YEAR(C.DATE)AS CHAR(4))+'-'+CAST(MONTH(C.DATE)AS CHAR(2)));

这是解决方案,

Select [Date],count(1) as Count From (
select Cast(cast(d.DateTime as date) as varchar(7)) as [Date],UserId 
from AuditLog d 
Group by Cast(cast(d.DateTime as date) as varchar(7)),UserId
) as q1 Group by [Date]
Order by 1

希望,它会起作用。

GROUP DATE(年和月)合并或分开并计算不同的 userId

SELECT  CONVERT(VARCHAR(7), [DateTime], 126)[Date], COUNT(DISTINCT UserID)[Count] 
FROM AuditLog
GROUP BY CONVERT(VARCHAR(7), [DateTime], 126)