0

7 つの dayID のそれぞれの 8:00 から 21:00 までの 15 分間隔ごとに、および各 agentID について、エージェントが 15 時間のうち何分間「対応可能」状態であったか、つまり、可用性に記録があるかを知りたいテーブル。たとえば、以下の agentID = 0107 の場合、8:00 から 8:15 の間で、彼は 6.35 分間応対可能でした。理論的には、15 分の範囲内に 2 つのレコードを追加する必要があることに注意してください。

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

ただし、この質問はスタンドアロンであるべきだと思います。

4

1 に答える 1

0

8:00 から 21:00 までの 15 分間隔すべてを含むテーブルが必要です -> 52 行とそれを CROSS JOIN します。

これにより、重複する間隔ごとに 1 つの行が返されます。

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 に答える