在SQL Server表查询中查找不同的用户

在SQL Server表查询中查找不同的用户,sql,sql-server,Sql,Sql Server,查找从给定日期起所有月份登录的不同用户 必须是当前日期,而不是考虑月份。 只有当前日期。不是本月 查找每个月登录I的不同用户 从这个例子来看,, Aditya和Kumar分别于1月、2月、3月和4月登录,因此被称为重复用户 所以我需要数到2 新用户:如果一个用户仅在最近一周登录,并且在此之前从未登录过,则称为新用户 例:Gopal被称为新用户,因为他只在4月26日和28日登录 创建表[dbo].[dbo.usagetracker]( [SNo][nchar](10)空, [用户名][nvarc

查找从给定日期起所有月份登录的不同用户 必须是当前日期,而不是考虑月份。 只有当前日期。不是本月

查找每个月登录I的不同用户

从这个例子来看,, Aditya和Kumar分别于1月、2月、3月和4月登录,因此被称为重复用户

所以我需要数到2

新用户:如果一个用户仅在最近一周登录,并且在此之前从未登录过,则称为新用户

例:Gopal被称为新用户,因为他只在4月26日和28日登录

创建表[dbo].[dbo.usagetracker](
[SNo][nchar](10)空,
[用户名][nvarchar](50)空,
[LoginDate][datetime2](7)空
)在[小学]
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'1',N'Adhitya',转换为日期时间2(N'2020-01-12T00:00:00.0000000))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'2',N'Selvam',强制转换(N'2020-01-01T00:00:00.0000000'作为DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'3',N'Kumar',强制转换(N'2020-02-02T00:00:00.0000000'AS DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'4',N'Adhitya',强制转换(N'2020-02-02T00:00:00.0000000'作为日期时间2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'5',N'Selvam',强制转换(N'2020-02-12T00:00:00.0000000'作为日期时间2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'6',N'Kumar',强制转换(N'2020-02-02T00:00:00.0000000'AS DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'7',N'Adhitya',强制转换(N'2020-03-17T00:00:00.0000000'作为DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'8',N'Selvam',强制转换(N'2020-03-23T00:00:00.0000000'作为日期时间2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'9',N'Kumar',强制转换(N'2020-03-23T00:00:00.0000000'AS DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'10',N'Kumar',CAST(N'2020-03-27T00:00:00.0000000'AS DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'11',N'Kumar',CAST(N'2020-04-02T00:00:00.0000000'AS DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'12',N'Kumar',CAST(N'2020-04-15T00:00:00.0000000'AS DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'13',N'pal',CAST(N'2020-04-26T00:00:00.0000000'AS DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'14',N'pal',CAST(N'2020-04-28500:00:00.0000000'AS DateTime2))
插入[dbo]。[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'15',N'Adhitya',强制转换(N'2020-04-28500:00:00.0000000'AS DateTime2))

插入[dbo].[dbo.usagetracker]([SNo],[Username],[LoginDate])值(N'16',N'Kumar',CAST(N'2020-01-15T00:00:00.0000000'AS DateTime2))
您可以使用聚合和
具有
子句:

select username
from t
where logindate >= @date
group by username
having count(distinct year(logindate) * 100 + month(logindate)) = datediff(month, @date, logindate) + 1;
实际上,您可以将包含子句的
简化为:

having count(distinct eomonth(logindate)) = datediff(month, @date, logindate) + 1;

这里的大多数人希望示例表数据和预期结果是格式化文本,而不是图像。使用SQL表脚本更新。很抱歉给您带来不便