仅使用开始时间创建间隔

时间:2020-07-16 03:32:20

标签: sql-server tsql intervals

我在Microsoft SQL Server数据库中有呼叫中心数据,仅按事件开始时间细分。我需要将其转换为间隔,以便代理的下一个“事件”的开始时间也是上一个事件的结束时间

表格如下:

enter image description here

我的计划是将其转换为此:

enter image description here

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

类似这样的东西:

WITH DataSource AS
(
    SELECT *
          ,ROW_NUMBER () OVER (PARTITION BY AgentID ORDER BY StartTime) AS [rowID]
    FROM mytable
)
SELECT DS1.AgentID
      ,DS1.[Name]
      ,DS1.[StartTime]
      ,DS2.[StartTime]
      ,CONVERT(varchar(8), DATEADD(ms, DATEDIFF(SECOND, DS1.[StartTIme], DS2.[StartTime]) * 1000, 0), 114) AS [IntervalTime]
      ,DS1.[Activity]
FROM DataSource DS1
INNER JOIN DataSource DS2
    ON DS1.[AgentID] = DS2.[AgentID]
    AND DS1.[rowID] = DS2.[rowID] + 1;

这个想法是使用ROW_NUMBER来了解如何将一个开始时间段与下一个开始时间段结合在一起。然后,我们需要执行INNER JOIN以排除最后一条记录(您可以切换到LEFT JOIN以显示它)。之后,只需使用DATEDIFF即可获得以秒为单位的差异,并将输出转换为所需的格式。

相关问题