В часах, конечно
select empid, cast(datediff(d,0,workingpunch_ts) as datetime),
SUM(case when inout_id = 2 then 1 else -1 end *
datediff(MI, datediff(d,0,workingpunch_ts), workingpunch_ts))/60.0 as Hours
from clock
where workingpunch_ts between '20110201' and '20110228 23:59:59.999'
group by empid, datediff(d,0,workingpunch_ts)
Пока входы и выходы в паре, вы добавляете все выходы и удаляете все входы, например,
- IN (9)
+ OUT (12)
- IN (13:15)
+ OUT (17)
Основной коднаходится во 2-й и 3-й строках
datediff-datediff определяет минуты с полуночи для каждого workingpunch_ts
, и, если это вычеркивание, оно становится отрицательным с помощью оператора CASE inout_id
.
Остальные добавляются для реальных сценариев, в которых нужно группировать по сотруднику и по дню в пределах диапазона дат.