Sql server SQL Server按持续时间分组

Sql server SQL Server按持续时间分组,sql-server,sql-server-2012-express,group-by,Sql Server,Sql Server 2012 Express,Group By,经过一些搜索,我能够使用这个查询得到结果 SELECT DATEDIFF(HOUR, LOGINTIME, LOGOUTTIME) FROM [SESSION] GROUP BY DATEPART(YEAR, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)), DATEPART(MONTH, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)), DATEPART(DAY, DATEDIFF(HOUR,L

经过一些搜索,我能够使用这个查询得到结果

SELECT 
    DATEDIFF(HOUR, LOGINTIME, LOGOUTTIME) 
FROM 
    [SESSION]
GROUP BY 
    DATEPART(YEAR, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
    DATEPART(MONTH, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
    DATEPART(DAY, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
    DATEPART(HOUR, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
    (DATEPART(MINUTE, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)) / 10),
    LoginTime, LogoutTime
它是一个包含用户登录和注销时间会话的表。我想要的是计算有多少用户在一个小时内有两个或更多的时间。我要数一数

此查询的示例结果为

0
0
0
1
1
1
2
4
17
20

尝试将其放入子查询,并按如下方式对结果进行分组和筛选:

SELECT Hours, COUNT(T1.Hours) HourCount
FROM 
    (SELECT DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME) as Hours
    FROM [SESSION]
    GROUP BY 
        DATEPART(YEAR, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
        DATEPART(MONTH, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
        DATEPART(DAY, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
        DATEPART(HOUR, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
        (DATEPART(MINUTE, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)) / 10),
        LoginTime,LogoutTime) T1
GROUP BY T1.Hours
HAVING T1.Hours > 1
这将按
小时数进行分割和计数,其中时间大于1

试试这个:

SELECT MAX(Total) AS Total
FROM
    (SELECT 
        ROW_MUMBER() OVER (ORDER BY DATEDIFF(HOUR, LOGINTIME, LOGOUTTIME)) AS Total 
    FROM 
        [SESSION]
    WHERE
        DATEDIFF(HOUR, LOGINTIME, LOGOUTTIME) > 1
    GROUP BY 
        DATEPART(YEAR, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
        DATEPART(MONTH, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
        DATEPART(DAY, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
        DATEPART(HOUR, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)),
        (DATEPART(MINUTE, DATEDIFF(HOUR,LOGINTIME,LOGOUTTIME)) / 10),
        LoginTime, LogoutTime
) AS T

在将“SessionDuration”添加为带有“LogoutTime LoginTime”的计算列之后,我使用这个查询来完成这项工作


对于这两种情况,我在group by和HAVE附近得到了不正确的语法。对不起,我已经在一些示例数据上测试了上述修改版本,因此应该会产生结果。Msg 156,级别15,状态1,第2行关键字“FROM”附近的语法不正确。Msg 102,级别15,状态1,第11行“T1”附近的语法不正确。我再次更新,在select语句中留下了一个额外的逗号。任何适合您的语句。很明显,您可以修改表设计,此处的其他答案只是尝试回答发布的问题。它表示ROW_NUMBER()无效您使用的是哪个版本?SQL Server 2012 Express Edition
SELECT COUNT(DATEPART(HOUR,SessionDuration)) AS [Count],
       DATEPART(HOUR,SessionDuration) AS SessionDuration 
FROM [SESSION]
GROUP BY DATEPART(HOUR,SessionDuration)