【发布时间】:2015-10-21 18:01:46
【问题描述】:
我希望能够计算 SQL Server 2008 中某些事件之间的总时间。
我有一张如下表:
UserId Event EventTimestamp
+-------+----------+---------------+
1 CheckedIn 14-05-15 10:01
2 CheckedIn 14-05-15 10:15
3 CheckedIn 14-05-15 10:17
1 CheckedOut 14-05-15 10:25
1 Logout 14-05-15 10:26
如果您查看表格,用户可以签入,然后可以签出,然后下线。
我想计算一个人从签到到签出点之间的时间,按每周分组,其中持续时间(签到和签出之间)小于 10 分钟。
到目前为止,我已经设法按周分组,但我似乎无法计算这些事件之间的持续时间(将按此顺序发生)...
select
'Week ' + cast(datepart(wk, EventUpdateStamp) as varchar(2)) Week,
UserId,
Event
from MyTable
group by datepart(wk, EventUpdateStamp), UserId, Event
我想要这样的结果:
UserId TotalSessionCheckInTimeMinutes WeekNumber
+-------+------------------------------+---------------+
1 24 43
以第一行为例:
- 1 是用户 ID
- 24 是他之间的总持续时间(以分钟为单位) 入住和退房
- 43 是一年中的第几周
我只想将入住加入退房。不想在签出和注销之间进行衡量(换句话说,衡量他签入的时间)。
【问题讨论】:
-
你能解释一下这一行的结果吗:1 10 43? 10 表示 10:00?
-
SQL Server 2008 R2 版
-
1 10 43: 1 是用户 ID,24 是他入住和退房之间的总时长,以分钟为单位,43 是一年中的周数。
-
@AshesToAshes:我认为第二行必须是:1 1 43(其中 1 是用户 ID,1 是签出和注销之间的差异,43 周数)。对吗?
-
我们只想包含签入到签出,因此排除 1 1 20 结果,因为我们不想在签出和注销之间进行测量。 (意思是他在办公室呆了多久)
标签: sql-server tsql sql-server-2008-r2