Zgrupuj tabelę w 15-minutowych odstępach

T-SQL, SQL Server 2008 i nowsze

Biorąc pod uwagę przykładową tabelę

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

Muszę to rozbić na widok, który wykorzystuje 15-minutowe interwały, na przykład:

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

Teraz udało mi się przeszukać i znaleźć kilka zapytań, które ulegną awarii. Znalazłem coś podobnego dla MySqlTutaj :

I coś dla T-SQLTutaj

Ale w drugim przykładzie sumują wyniki, podczas gdy muszę podzielić całkowity czas trwania przez czas interwału (900 sekund) według użytkownika według statusu.

Udało mi się zaadaptować przykłady w drugim łączu, aby podzielić wszystko na przedziały, ale całkowity czas trwania jest zwracany i nie mogę całkiem zrozumieć, jak uzyskać czasy trwania Interwału do podziału (i nadal sumować do całkowitego oryginalnego czasu trwania).

Z góry dziękuję za wszelkie informacje!

edytuj: Pierwsza próba

 ;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

edytuj: Druga próba

;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