TSQL用于计算登录和注销之间的总时间,以及每个状态下的时间
我有如下SQL表(图1) 我试图计算每个状态的时差以及代理登录和注销之间的总持续时间,如下所示(图2)。我试图使用超前/滞后功能,但无法实现输出。你能帮个忙吗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
下面的代码片段应该可以帮助您开始:
;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)登录和注销时,我需要限制每天的持续时间。我试图将所有州的时间和每一天的总持续时间相加。明天会有一个代理来登录和注销,需要在不同的持续时间内登录和注销。有人想提供详细信息,说明为什么这样做没有帮助或不起作用吗?:)'