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