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:如果你得到答案,请接受。。