Sql server 2008 T-SQL中基于登录状态的时间跨度计算

Sql server 2008 T-SQL中基于登录状态的时间跨度计算,sql-server-2008,tsql,Sql Server 2008,Tsql,我有一张临时的桌子,它的结构如下 create table #temptime ( logtime datetime, [status] varchar(3) ) 从上面可以看到,我有登录时间和状态。我需要根据状态对这个表进行分区,按日期排序。我将需要计算这两个创建的分区之间的时间跨度,并合并以确定用户在该前提下的时间长度 例如,假设我们有4条记录 Partition based on status IN Partition based in status OUT

我有一张临时的桌子,它的结构如下

create table #temptime
(
   logtime datetime,
   [status] varchar(3)
)
从上面可以看到,我有登录时间和状态。我需要根据状态对这个表进行分区,按日期排序。我将需要计算这两个创建的分区之间的时间跨度,并合并以确定用户在该前提下的时间长度

例如,假设我们有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
完成这项任务的最佳方式是什么

谢谢

试试这个:

;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 

试试这个:

;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 


@用户14750:如果你得到答案,请接受@用户14750:如果你得到答案,请接受。。