安排合规性查询

时间:2013-08-26 18:28:13

标签: sql sql-server

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

来自AVAILABILITY TABLE的样本数据:

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 agents in each timeslot sql server

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

1 个答案:

答案 0 :(得分:0)

你需要一张从8:00到21:00间隔15分钟的桌子 - > 52行和CROSS JOIN吧。

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

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