首页 > 解决方案 > SQL Server:在表中某个值后使用函数

问题描述

我试图找到存储的对话中两个特定点之间的时间差。这些观点在每次对话中都可能不同,这对我来说很困难。我需要代理的消息和它之后的第一个 EndUser 响应之间的时间差。

在下面的 CaseNr 1234 示例中,我需要 MessageNrs 3&4、5&6 和 7&8 之间的时间差。在 CaseNr 2345 中,我需要 MessageNrs 3&4、5&6、7&8 和 10&11 之间的时间差。在 CaseNr 4567 中,我需要 2&3 和 4&5 之间的时间差。

如图所示,Agent 和 EndUser 的顺序在每个对话中以及这些类型的位置可能不同。

有没有办法按照我在 SQL Server 中描述的方式计算时差?

在此处输入图像描述

标签: sql-serverdatediff

解决方案


我认为这段代码应该对你有所帮助。

with t(MessageNr,CaseNr,Type, AgentTime, EndUserTime) as
(
    select 
        t1.MessageNr,
        t1.CaseNr,
        t1.Type,
        t1.EntryTime,
        (select top 1 t2.EntryTime 
        from [Your_Table] as t2 
        where t1.CaseNr = t2.CaseNr
            and t2.[Type] = 'EndUser'
            and t1.EntryTime < t2.EntryTime
        order by t2.EntryTime) as userTime
    from [Your_Table] as t1
    where t1.[Type] = 'Agent'
)
select t.*, DATEDIFF(second, AgentTime, EndUserTime)
from t;

推荐阅读