我在Microsoft SQL Server数据库中有呼叫中心数据,仅按事件开始时间细分。我需要将其转换为间隔,以便代理的下一个“事件”的开始时间也是上一个事件的结束时间
表格如下:
我的计划是将其转换为此:
谢谢您的帮助!
答案 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
即可获得以秒为单位的差异,并将输出转换为所需的格式。