计算同一列中不同数字的日期之间的差异



我无法正确提出请求,

结果应该会告诉我哪个数字在系统中停留多长时间。因此,当is_logedin_in_queue=1登录时当is_logedin_in_queue=0已注销时1到o之间的时间将显示总停留时间。

下面我展示了一个请求,我有一些东西不能正常工作——一些小东西。非常感谢。

num        timeofupdate               is_loggedin_in_queue
109     2021-04-27 06:00:02.000       1           
265     2021-04-27 08:32:53.000       1           
265     2021-04-27 11:42:34.000       0           
265     2021-04-27 12:16:28.000       1           
242     2021-04-27 13:23:34.000       0           
242     2021-04-27 14:16:40.000       1           
228     2021-04-27 14:30:25.000       0           
228     2021-04-27 14:30:25.000       0       
228     2021-04-27 15:46:40.000       1           
228     2021-04-27 15:46:40.000       1           
265     2021-04-27 16:41:53.000       0           
242     2021-04-27 16:59:42.000       0           
109     2021-04-27 17:00:00.000       0     

SELECT *
FROM [tblAgentQueueStatus] qs2
WHERE qs2.[timeofupdate] = '2021-04-27' 
) qs
LEFT JOIN [tblAgentQueueStatus] qs1 ON qs.q_num = qs1.q_num 
AND qs.ag_num = qs1.ag_num 
AND qs1.is_loggedin_in_queue = 0
AND qs.[timeofupdate] < qs1.[timeofupdate]
WHERE qs.is_loggedin_in_queue = 1 
GROUP BY qs.q_num, qs.ag_num, qs.[timeofupdate]
) t

预期结果是时间差is_logedin_in_queue 1和is_logettin_in_queue 0在编号上

num 109 10:59:58-以相同的方式为其他人记录时间

您可以为此使用窗口函数。基本上,您希望将所有1和以下0分配给一个组,然后进行聚合。您可以使用累积反向和来分配分组。

select min(timeofupdate), max(timeofupdate),
datediff(second, min(timeofupdate), max(timeofupdate)) as diff_seconds
from (select aqs.*,
sum(case when is_loggedin_in_queue = 0 then 1 else 0 end) over (order by timeofupdate) as grp
from tblAgentQueueStatus aqs
) aqs
group by grp;

这对日期/时间函数使用SQL Server语法。SQL Server的选择主要基于代码中的方括号。

您可以使用滞后函数来解决这个问题。请注意,您的示例中有一些数据与您的描述不符。

这里是sqlfiddle向您展示的结果

这是代码:

select num,
datediff(minute, timeofupdate, prevTimeofupdate) as timeDifference,
(timeofupdate-prevTimeofupdate) as test
from
(
select *, 
lag([timeofupdate]) over (partition by [num] order by [num], [timeofupdate]) as prevTimeofupdate
from Table1
) t
where is_loggedin_in_queue = 0

最新更新