Tabela de grupos em intervalos de 15 minutos

T-SQL, SQL Server 2008 e superior

Dada uma tabela de amostra de

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

Eu preciso dividir isso em uma visão que usa intervalos de 15 minutos, por exemplo:

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....

Agora eu fui capaz de pesquisar e encontrar algumas consultas que vão quebrar Eu encontrei algo semelhante para MySqlAqui :

E algo para o T-SQLAqui

Mas no segundo exemplo eles estão somando os resultados, enquanto eu preciso dividir a duração total pelo intervalo de tempo (900 segundos) por usuário por status.

Consegui adaptar os exemplos no segundo link para dividir tudo em intervalos, mas o tempo total de duração é retornado e não consigo descobrir como obter as durações do intervalo para dividir (e ainda resumir a duração original total).

Agradecemos antecipadamente por qualquer insight!

edit: primeira tentativa

 ;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

edit: segunda tentativa

;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;

questionAnswers(5)

yourAnswerToTheQuestion