Вы можете использовать оконную функцию lead()
, чтобы получить createdtime
«следующей» записи, а затем агрегировать.
Это дает вам общее время, которое каждый агент провел в каждом статусе:
select
agentid,
availabilitystatusid,
sum(datediff(hour, createdtime, lead_createdtime)) duration_hours
from (
select
t.*,
lead(createdtime)
over(partition by agentid order by createdtime) lead_createdtime
from mytabe t
) t
group by agentid, availabilitystatusid
Предполагая, что периоды не охватывают несколько дней - или что вы хотите привязать продолжительность к дню, когда начатый период, вы можете сделать:
select
agentid,
availabilitystatusid,
sum(datediff(hour, createdtime, lead_createdtime)) duration_hours,
date(createdtime) created_day
from (
select
t.*,
lead(createdtime)
over(partition by agentid order by createdtime) lead_createdtime
from mytabe t
) t
group by agentid, availabilitystatusid, date(createdtime)