sql >> データベース >  >> RDS >> Sqlserver

テーブルを15分間隔にグループ化します

    ;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フィドルデモ



    1. リレーショナルデータベースと非リレーショナルデータベース–パート2

    2. PostgreSQLでのPi()のしくみ

    3. get_headers()よりも速いもの

    4. AWS Aurora MySQLサーバーレス:MySQLWorkbenchから接続する方法