sql >> Database >  >> RDS >> Sqlserver

Groepeer tafel in intervallen van 15 minuten

;with cte_max as 
(
   select dateadd(mi, -15, max(StatusEndDateTime)) as EndTime, min(StatusSetDateTime) as StartTime
   from AgentActivityLog
), times as
(
    select StartTime as Time from cte_max
    union all
    select dateadd(mi, 15, c.Time)
    from times as c
        cross join cte_max as cm
    where c.Time <= cm.EndTime
)
select
    t.Time, A.UserID, A.Status,
    case
        when t.Time = A.StatusEndDateTime then 0
        else A.StatusDuration / (count(*) over (partition by A.StatusSetDateTime, A.UserID, A.Status) - 1)
    end as Duration
from AgentActivityLog as A
    left outer join times as t on t.Time >= A.StatusSetDateTime and t.Time <= A.StatusEndDateTime

sql fiddle-demo



  1. Laravel berekent de som van twee kolommen met een voorwaarde

  2. RangeError voor eenvoudige toewijzing van gehele getallen in Rails 4.2.0 die moet worden opgevangen door validatie

  3. Ingevoegde waarde wijzigen met trigger

  4. Meerdere partities op een tafel?