log_date log_time emp_id emp_name log_action
2013-06-16 08:48:48.0000000 30170 Sarah John 1
2013-06-16 16:48:48.0000000 30170 Sarah John 4
2013-06-15 07:18:48.0000000 30160 Paula Fred 1
2013-06-15 16:38:48.0000000 30160 Paula Fred 4
上記の情報を含むログテーブルがあります。各従業員の毎日の勤務時間を計算し、別の 10 進数フィールドに格納するクエリがあります。問題は、分数がずれていることです。従業員が同じ日に複数回パンチイン/パンチアウトすると、時間が追加されます。最初の良いパンチイン/パンチアウトのみを考慮したいと思います。
Select DISTINCT emp_id,log_date,SUM(datediff(Minute,stm, etm))/60.0
as wrk_hrs from
(
SELECT
emp_id, log_date,
log_time as etm,
(
SELECT top 1 log_time
FROM tblLogs
WHERE log_action = '1' and log_time <= a.log_time and emp_id=a.emp_id and a.log_date=log_date order by log_time desc
) as stm
FROM tblLogs as a
WHERE log_action = '4'
)as a
where stm is not null
group by log_date,emp_id,a.stm,a.etm;
時間と分を計算し、さらに計算するために保存するより正確な方法はありますか。レポートには時間の経過と週ごとの合計時間が必要です。