0

構造が以下の一時テーブルがあります。

create table #temptime
(
   logtime datetime,
   [status] varchar(3)
)

上からわかるように、logintime と status があります。このテーブルを status に基づいて分割し、日付順に並べる必要があります。これら 2 つの作成されたパーティション間のタイム スパンを計算し、統合して、ユーザーが施設内にいる時間を特定する必要があります。

たとえば、4 つのレコードがあるとします。

Partition based on status IN        Partition based in status OUT

8:45 AM                                 10:45 AM
11:00 AM                                15:00 PM

プログラムはタイムスパンを見つける必要があります

10:45 AM - 8:45 AM = 2 Hours + 11:00 Am - 15:00 PM = 4 Hours

このタスクを達成するための最良の方法は何ですか?

ありがとう

4

1 に答える 1

3

これを試して:

;with cte_IN as (select logtime,ROW_NUMBER() 
                       over (partition by [status] order by logtime) row_num
from #temptime
where [status]='IN'),
cte_OUT as (select logtime,ROW_NUMBER() 
                        over (partition by [status] order by logtime) row_num
from #temptime
where [status]='OUT')
select i.logtime,O.logtime,DATEDIFF(MI,i.logtime,O.logtime)/60.0 as 'hours'
from cte_IN I
join cte_OUT O
on I.row_num=O.row_num 


SQLフィドルデモ

于 2012-09-06T09:28:54.417 に答える