我想根据LogInDate
列对记录进行分组。 LogInDate
的数据类型为datetime
,但我想仅将GROUP BY
与该字段的日期一起使用,并且不想包括时间。
这是我尝试获取过去7天唯一登录次数的方法
select LogInDate,count(*)
from Login
group by LogInDate,UserID
having LogInDate< (getdate() - 6);
但是它根据LogInDate
值的日期和时间进行分组。我尝试在CONVERT
内使用GROUP BY
,如下所示
select LogInDate,count(*)
from Login
group by CONVERT(date,LogInDate) ,UserID
having LogInDate< (getdate() - 6);
,但随后失败:
消息8121,级别16,状态1,行17在HAVING子句中,'Login.LogInDate'列无效,因为它既不包含在聚合函数中也不在GROUP BY子句中。
答案 0 :(得分:2)
对于having
,您需要使用这样的聚合
having max(CONVERT(date,LogInDate))>= (getdate() - 6)
但是对于您而言,可以通过where clause
完成,如下所示-
select CONVERT(date,LogInDate),count(*)
from Login where LogInDate< (getdate() - 6)
group by CONVERT(date,LogInDate)
答案 1 :(得分:0)
我在下面放置了示例数据供您参考。
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