はそれぞれでのと仮定すると、表示されないはずがある場合があり、OUT充当し、順番に、あなたは以下のようにこれを取得するために、SQL Server 2012年の遅れを使用することができます。
select empcode, sum(hrs) as TotalWorkHours from (
select *,Hrs = datediff(MINUTE,ActionDate, lag(ActionDate, 1, ActionDate) over(partition by empcode order by ActionDate desc))/60.0 from employee
where statuses = 'in'
) a
group by empcode
サンプル入力クエリ:この要件のため
create table employee (id int identity(1,1), empcode int, [statuses] varchar(5), ActionDate datetime)
insert into employee (empcode, statuses, ActionDate) values
(2,'in', dateadd(hour, -20, getdate()))
, (2,'out', dateadd(hour, -19, getdate()))
, (2,'in', dateadd(hour, -18, getdate()))
, (2,'out', dateadd(hour, -17, getdate()))
, (2,'in', dateadd(hour, -12, getdate()))
, (2,'out', dateadd(hour, -10, getdate()))
, (3,'in', dateadd(hour, -9, getdate()) )
, (3,'out', dateadd(hour, -6, getdate()))
, (3,'in', dateadd(hour, -4, getdate()) )
, (3,'out', dateadd(hour, -1, getdate()))
が出力:
+---------+----------------+
| empcode | TotalWorkHours |
+---------+----------------+
| 2 | 8.000000 |
| 3 | 5.000000 |
+---------+----------------+
その人に「アウト」がない場合はどうなりますか?すべての「IN」に「OUT」があることが保証されていますか? –
この投稿は少し鮮明になる可能性があります。 – Adam
アウトされていない場合は、欠落として表示する必要があります。OUT同様のコンセプトです。 – Nehru