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;