Вы можете вычислить следующие out
для каждого in
и взять разницу:
select t.employee_id,
sum(datediff(second, local_time, next_local_time)) as diff_seconds
from (select t.*,
lead(local_time) over (partition by employee_id order by local_time) as next_local_time
from t
) t
where action = 'IN'
group by t.employee_id;
Примечание. Предполагается, что IN
s и OUT
s чередуются, поэтому есть в строке нет строк с одинаковым действием.
Это также дает результат в секундах, который может быть преобразован в десятичные часы или любой другой конкретный формат, который вы хотите.