Sql 我可以在GROUPBY子句中使用类型转换函数吗?
我想根据Sql 我可以在GROUPBY子句中使用类型转换函数吗?,sql,sql-server,group-by,Sql,Sql Server,Group By,我想根据LogInDate列对我的记录进行分组。LogInDate的数据类型是datetime,但我想使用groupby仅包含此字段的日期,不想包含时间 以下是我在过去7天中尝试获取的唯一登录计数 select LogInDate,count(*) from Login group by LogInDate,UserID having LogInDate< (getdate() - 6); 但后来它没有说: Msg 8121,级别16,状态1,第17行列“Log
LogInDate
列对我的记录进行分组。LogInDate
的数据类型是datetime
,但我想使用groupby
仅包含此字段的日期,不想包含时间
以下是我在过去7天中尝试获取的唯一登录计数
select LogInDate,count(*)
from Login
group by LogInDate,UserID
having LogInDate< (getdate() - 6);
但后来它没有说:
Msg 8121,级别16,状态1,第17行列“Login.LogInDate”在HAVING子句中无效,因为它未包含在聚合函数或GROUP BY子句中
对于
拥有
,您需要像这样使用聚合
具有max(CONVERT(date,LogInDate))>=(getdate()-6)
但在您的情况下,它可以通过下面的where子句来完成-
select CONVERT(date,LogInDate),count(*)
from Login where LogInDate< (getdate() - 6)
group by CONVERT(date,LogInDate)
选择转换(日期、登录日期)、计数(*)
从LogInDate<(getdate()-6)处登录
按转换分组(日期、登录日期)
我已将样本数据放在下面供您参考
CREATE TABLE #LoginValues(LoginDate datetime, UserID int)
INSERT INTO #LoginValues
values ('2019-01-28', 2), ('2019-01-29', 1),('2019-01-22', 3),('2019-01-28', 3);
DECLARE @Filterdate DATE = DATEADD(dd,-6,getdate())
;WITH CTE_LoginDate
AS
(
select cast(LogInDate as Date) AS LoginDate,UserID
from #LoginValues
WHERE LoginDate > @Filterdate
)
SELECT LoginDate, COUNT(*)
from cte_loginDate
group by LoginDate
CREATE TABLE #LoginValues(LoginDate datetime, UserID int)
INSERT INTO #LoginValues
values ('2019-01-28', 2), ('2019-01-29', 1),('2019-01-22', 3),('2019-01-28', 3);
DECLARE @Filterdate DATE = DATEADD(dd,-6,getdate())
;WITH CTE_LoginDate
AS
(
select cast(LogInDate as Date) AS LoginDate,UserID
from #LoginValues
WHERE LoginDate > @Filterdate
)
SELECT LoginDate, COUNT(*)
from cte_loginDate
group by LoginDate