add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
select *
into t
from (values ('A', convert(datetime, '2018-12-05 08:30:00'), convert(datetime, '2018-12-05 09:45:00')),
('B', convert(datetime, '2018-12-05 09:30:00'), convert(datetime, '2018-12-05 10:00:00')),
('B', convert(datetime, '2018-12-05 10:30:00'), convert(datetime, '2018-12-05 10:45:00')),
('A', convert(datetime, '2018-12-05 10:45:00'), convert(datetime, '2018-12-05 11:45:00')),
('A', convert(datetime, '2018-12-05 12:15:00'), convert(datetime, '2018-12-05 12:30:00')),
('A', convert(datetime, '2018-12-06 05:30:00'), convert(datetime, '2018-12-06 06:45:00')),
('B', convert(datetime, '2018-12-06 06:45:00'), convert(datetime, '2018-12-06 07:45:00')),
('B', convert(datetime, '2018-12-06 08:45:00'), convert(datetime, '2018-12-06 09:30:00'))
) v(Usr, Start_Time, End_Time)
8 rows affected
select t.usr, convert(date, start_time),
avg(datediff(minute, end_time, next_start_time))
from (select t.*,
lead(start_time) over (partition by usr, convert(date, start_time) order by start_time) as next_start_time
from t
) t
group by usr, convert(date, start_time)
order by 2, 1
usr (No column name) (No column name)
A 2018-12-05 45
B 2018-12-05 30
A 2018-12-06 null
B 2018-12-06 60
Warning: Null value is eliminated by an aggregate or other SET operation.