0

これを実行すると (SQL Server 2008 R2):

SELECT [UserId]
      ,[StateDuration]
      ,[StatusKey]  
FROM [AgentActivityLog]
WHERE [StatusDateTime] between '2012-01-01' and '2012-12-31'

次のように UserId ごとに行を取得します: UserId StatusDateTime StatusKey

cfrinco      3456   Meeting
echartl      23456  Available
mbarbewar    3256   Lunch
bsantiago    46565  Available
bsantiago    79     Follow Up
fburger      5464   Available

これは、各ユーザーが各ステータスにあった時間を秒単位で教えてくれます。

もちろん、1 日あたりのエントリー数も多くなりますUserId つまり、ユーザーは 1 日のうちに、利用可能から会議、利用可能、昼食、利用可能などに移動します。

私がやりたいことは、暦日UserIdあたり、あたり、秒単位で時間を合計することです。StatusKeyしたがって、次のようになります。

cfrinco      3456   Meeting       '2012-01-01'
cfrinco      45678  Available     '2012-01-01'
cfrinco      7845   Meeting       '2012-01-02'
cfrinco      32541  Available     '2012-01-02'
cfrinco      4455   Meeting       '2012-01-03'
cfrinco      12456  Available     '2012-01-03'
fburger      3456   Meeting       '2012-01-01'
fburger      75489  Available     '2012-01-01'
fburger      3541   Lunch         '2012-01-01'
fburger      5486   Meeting       '2012-01-02'
fburger      64587  Available     '2012-01-02'
fburger      3614   Lunch         '2012-01-02'
fburger      3225   Meeting       '2012-01-03'
fburger      35414  Available     '2012-01-03'
fburger      3745   Lunch         '2012-01-03'

よろしくお願いいたします。

4

2 に答える 2

1

ユーザー ID、ステータス、および日付でグループ化されたデータが必要な場合は、次のようにします。

SELECT
 UserId
 SUM(StateDuration),
 StatusKey,
 StatusDateTime
FROM AgentActivityLog
WHERE StatusDateTime BETWEEN '2012-01-01' AND '2012-12-31'
GROUP BY
 UserId,
 StatusDateTime,
 StatusKey
于 2012-12-25T20:58:35.610 に答える
0

これが私が探していたものです。スタックオーバーフローのさまざまな答えを調査し、それらをまとめた後、私はそれを手に入れました。

SELECT
UserId, SUM(StateDuration) SumStateDuration, StatusKey,
DATEADD(dd, 0, DATEDIFF(dd, 0, StatusDateTime)) StatusDate
FROM [AgentActivityLog]
WHERE StatusDateTime BETWEEN '2012-01-01' AND '2012-12-31'

GROUP BY
 UserId,
 DATEADD(dd, 0, DATEDIFF(dd, 0, StatusDateTime)),
 StatusKey

重要な部分は、(a)日時列から日付だけを取得し、(b)それによってグループ化することでした。

于 2012-12-26T00:09:18.603 に答える