Групповой стол с 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;