Групповой стол с 15-минутными интервалами

T-SQL, SQL Server 2008 и выше

Приведенный образец таблицы

 StatusSetDateTime   | UserID | Status    | StatusEndDateTime   | StatusDuration(in seconds)
============================================================================
 2012-01-01 12:00:00 | myID   | Available | 2012-01-01 13:00:00 | 3600

Мне нужно разбить это на представление, которое использует 15-минутные интервалы, например:

IntervalStart       | UserID | Status | Duration

===========================================

2012-01-01 12:00:00 | myID | Available | 900 

2012-01-01 12:15:00 | myID | Available | 900

2012-01-01 12:30:00 | myID | Available | 900 

2012-01-01 12:45:00 | myID | Available | 900 

2012-01-01 13:00:00 | myID | Available | 0

etc....

Сейчас я'Я смог найти и найти несколько запросов, которые сломались. Я нашел что-то похожее на MySql.Вот :

И кое-что для T-SQLВот

Но во втором примере они суммируют результаты, тогда как мне нужно разделить общую продолжительность на интервал времени (900 секунд) по пользователю по статусу.

Я смог адаптировать примеры во второй ссылке, чтобы разбить все на интервалы, но общее время продолжительности возвращается, и я не могу понять, как заставить делить интервалы (и все же суммировать с общей исходной продолжительностью).

Заранее спасибо за любую информацию!

редактировать: первая попытка

 ;with cte as 
    (select MIN(StatusDateTime) as MinDate
          , MAX(StatusDateTime) as MaxDate
          , convert(varchar(14),StatusDateTime, 120) as StartDate
          , DATEPART(minute, StatusDateTime) /15 as GroupID
          , UserID
          , StatusKey
          , avg(StateDuration) as AvgAmount
     from AgentActivityLog
     group by convert(varchar(14),StatusDateTime, 120)
         , DATEPART(minute, StatusDateTime) /15
         , Userid,StatusKey)

  select dateadd(minute, 15*GroupID, CONVERT(datetime,StartDate+'00'))
         as [Start Date]
       , UserID, StatusKey, AvgAmount as [Average Amount]
  from cte

редактировать: вторая попытка

;With cte As
   (Select DateAdd(minute
                   , 15 * (DateDiff(minute, '20000101', StatusDateTime) / 15)
                   , '20000101') As StatusDateTime
         , userid, statuskey, StateDuration
    From AgentActivityLog)

 Select StatusDateTime, userid,statuskey,Avg(StateDuration)
 From cte
 Group By StatusDateTime,userid,statuskey;

Ответы на вопрос(5)

Ваш ответ на вопрос