仅使用开始时间创建间隔

Creating an interval using only start times

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

table是这样的:

我的计划是将其转换为:

感谢您的帮助!

像这样:

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 获取秒数差异并将输出转换为您需要的格式。