Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL用于计算登录和注销之间的总时间,以及每个状态下的时间_Sql_Sql Server_Tsql - Fatal编程技术网

TSQL用于计算登录和注销之间的总时间,以及每个状态下的时间

TSQL用于计算登录和注销之间的总时间,以及每个状态下的时间,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有如下SQL表(图1) 我试图计算每个状态的时差以及代理登录和注销之间的总持续时间,如下所示(图2)。我试图使用超前/滞后功能,但无法实现输出。你能帮个忙吗 下面的代码片段应该可以帮助您开始: ;WITH TotalDuration as ( SELECT LogIN = Min(DateTime) ,LogOut = Max(DateTime) ,AgentID FROM YourTable Group

我有如下SQL表(图1)

我试图计算每个状态的时差以及代理登录和注销之间的总持续时间,如下所示(图2)。我试图使用超前/滞后功能,但无法实现输出。你能帮个忙吗


下面的代码片段应该可以帮助您开始:

;WITH TotalDuration as 
(
    SELECT  LogIN = Min(DateTime)
            ,LogOut =   Max(DateTime)
            ,AgentID
    FROM    YourTable
    Group BY AgentID

)

SELECT Duration = DATEDIFF(MINUTE, LogIN, LogOut)
        ,AgentId
FROM TotalDuration
ORDER BY  AgentId



--TimeInState = datediff(minute, [DateTime], LEAD([DateTime], 1) OVER (Partition BY AgentID ORDER BY [DateTime])) 

我想你知道如何获得总的登录和注销时间使用最小和最大。。。这是你需要的超前和滞后

with cte as(
    select
        agentid,
        eventtype,
        [DateTime], 
        datediff(mi,[DateTime],LEAD([DateTime]) over (partition by agentid order by [DateTime])) as [Time_in_state]
    from yourTable)

select
    agentid,
    eventtype,
    cast([DateTime] as Date) as TheDate,
    sum(Time_in_state) as TotalTime,
from cte
group by
    agentid,
    eventtype,
    cast([DateTime] as Date)

尝试发布文本,而不是图像。还提供一些完整的示例输入和输出。您在当前数据集中没有显示任何秒数,但在输出中显示了秒数。还有,什么版本的SQL?我假设2012年存在提前/滞后,但如果您不在2012年之后,则此函数不可用,您需要使用窗口函数。我已将结果复制到excel中,其中未显示秒数,我使用的是SQL 2012。包括您迄今为止所做的一切,如已询问的,而不是图片,包括适当的示例。OP尝试在所有状态(保留、阅读、交谈等)中聚合时间,而不仅仅是登录和注销。感谢您的回复,当您提到以最小值(datetime)和最大值(datetime)登录和注销时,我需要限制每天的持续时间。我试图将所有州的时间和每一天的总持续时间相加。明天会有一个代理来登录和注销,需要在不同的持续时间内登录和注销。有人想提供详细信息,说明为什么这样做没有帮助或不起作用吗?:)'