仅使用开始时间创建间隔
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
获取秒数差异并将输出转换为您需要的格式。
我在 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
获取秒数差异并将输出转换为您需要的格式。