0

我想知道从 8:00 到 21:00 的每 15 分钟间隔的 7 个 dayID 以及每个 agentID 15 分钟中有多少分钟代理处于“可用”状态,即可用性中有记录桌子。例如,对于下面的 agentID = 0107,在 8:00 到 8:15 之间,他有 6.35 分钟的空闲时间。请注意,理论上,这 15 分钟范围内可能有两条记录必须加在一起。

可用性表中的示例数据:

agentID |   DayID | statestart         |stateend

0107  |     2 | 08:00:57.7730000    |08:07:18.2000000

0107 |      2|  08:18:02.1370000|   09:07:39.5140000

0107 |      2|  09:18:46.9340000|   09:21:41.8520000

关于我的问题的一些其他信息/背景可以在我问的上一个(类似)问题中找到: count available agent in each timelot sql server

但是,我认为这个问题应该是独立的。

4

1 回答 1

0

您需要一个从 8:00 到 21:00 -> 52 行的所有 15 分钟间隔的表并交叉连接它。

这将在每个重叠间隔返回一行:

SELECT agentid, dayid, t2.starttime,
   CASE WHEN t1.statestart > t2.starttime THEN t1.statestart ELSE t2.starttime END AS statestart,
   CASE WHEN t1.stateend < t2.endtime THEN t1.stateend ELSE t2.endtime END AS stateend
FROM tab AS t1 CROSS JOIN times AS t2
WHERE t1.statestart < t2.endtime
AND t1.stateend > t2.starttime

基于此,您可以轻松计算 statestart 和 stateend 之间的差异并将其总结 GROUP BY agentid, dayid, t2.starttime

于 2013-08-26T21:53:43.073 回答