我想知道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
但是,我认为这个问题应该是独立的。答案 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