Sql server SQL Server:使用登录和/或注销计算运行时间

Sql server SQL Server:使用登录和/或注销计算运行时间,sql-server,Sql Server,我有一个查询,提供用户登录的总小时数。我需要修改它,这样它就可以给我一个运行总数,而不用等到用户注销计算。谢谢你看 这就是我所拥有的 SELECT AGENTID, SUM (DATEDIFF(ss, LOGON,LOGOFF)/3600.0)AS HOURS FROM ASDM.DBO.AGENTLOGIN WHERE LOGON > '2015-10-02'AND LOGON < '2015-10-03' GROUP BY AGENTID

我有一个查询,提供用户登录的总小时数。我需要修改它,这样它就可以给我一个运行总数,而不用等到用户注销计算。谢谢你看

这就是我所拥有的

SELECT 
    AGENTID,
SUM (DATEDIFF(ss, LOGON,LOGOFF)/3600.0)AS HOURS
FROM 
    ASDM.DBO.AGENTLOGIN
WHERE 
    LOGON > '2015-10-02'AND LOGON < '2015-10-03'
GROUP BY 
    AGENTID
选择
阿根蒂德,
总计(DATEDIFF(ss、登录、注销)/3600.0)小时
从…起
ASDM.DBO.AGENTLOGIN
哪里
登录>'2015-10-02'和登录<'2015-10-03'
分组
阿根蒂德

由于当用户尚未注销时,
注销
值将为空,因此您可以使用以下功能将其替换为当前时间:

SELECT 
    AGENTID,
    SUM (DATEDIFF(ss, LOGON,ISNULL(LOGOFF, GETDATE()))/3600.0)AS HOURS
FROM 
    ASDM.DBO.AGENTLOGIN
WHERE 
    LOGON > '2015-10-02'AND LOGON < '2015-10-03'
GROUP BY 
    AGENTID
选择
阿根蒂德,
总和(DATEDIFF(ss,LOGON,ISNULL(LOGOFF,GETDATE())/3600.0)为小时
从…起
ASDM.DBO.AGENTLOGIN
哪里
登录>'2015-10-02'和登录<'2015-10-03'
分组
阿根蒂德

那么注销是空的?用当前时间替换它,如下所示:
ISNULL(注销,GETDATE())
(假设您使用的是非UTC日期,否则使用
GETUTCDATE
)@DavidG回答得很好。它工作得很好。