Agrupar la tabla en intervalos de 15 minutos

T-SQL, SQL Server 2008 y hasta

Dada una tabla de muestra de

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

Necesito dividir eso en una vista que use intervalos de 15 minutos, por ejemplo:

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

Ahora he podido buscar y encontrar algunas consultas que se desglosarán. Encontré algo similar para MySql.aquí :

Y algo para T-SQL.aquí

Pero en el segundo ejemplo, están sumando los resultados, mientras que necesito dividir la duración total por el tiempo de intervalo (900 segundos) por usuario por estado.

Pude adaptar los ejemplos en el segundo enlace para dividir todo en intervalos, pero se devuelve el tiempo de duración total y no puedo entender cómo hacer que se dividan las duraciones de Intervalo (y aún así sumar hasta la duración total original).

¡Gracias de antemano por cualquier información!

edición: primer intento

 ;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

edición: segundo intento

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

Respuestas a la pregunta(5)

Su respuesta a la pregunta