我在MS SQL中有一个包含3个cols的表tblSequence: ID,IP,[时间戳]
内容可能如下所示:
ID IP [Timestamp]
--------------------------------------------------
4347 62.107.95.103 2010-05-24 09:27:50.470
4346 62.107.95.103 2010-05-24 09:27:45.547
4345 62.107.95.103 2010-05-24 09:27:36.940
4344 62.107.95.103 2010-05-24 09:27:29.347
4343 62.107.95.103 2010-05-24 09:27:12.080
ID是唯一的,可以有n个IP。
想要计算每个IP花费的平均时间。在一行中
知道你可以这样做:
SELECT CAST(AVG(CAST(MyTable.MyDateTimeFinish -
MyTable.MyDateTimeStart AS float)) AS datetime)
但是我怎么能找到我唯一的IP行的第一个和最后一个条目,这样我才能有一个开始和结束的时间?我卡住了。
想要计算每个IP花费的平均时间。在一行中
答案 0 :(得分:1)
但是我怎么找到第一个呢 以及我唯一的IP行的最后一个条目 我可以有一个开始和结束时间? 我卡住了。
Select IP, MIN([Timestamp]) as MinTime, Max([Timestamp]) as MaxTime
from your table
group by IP
答案 1 :(得分:1)
假设您有一个可用于关联行的属性(列)(如seesionID),那么
Select s.SessionId, e.TimeStamp - s.Timestamp
From tblSequence s
Join tblSequence E
On e.SessionId = s.Sessionid
And e.TimeStamp = (Select Max(TimeStamp)
From tblSequence
Where Sessionid = s.Sessionid)
Where s.TimeStamp = (Select MinmeStamp)
From tblSequence
Where Sessionid = s.Sessionid)
使用评论中的yr:修复 在第一行,e.TimeStamp - s。[SessionGuid]
应为e.TimeStamp - s。[ TimeStamp ]
并在最后一个子查询中:
<强> MimeStamp 强> )
应该是
<强> 敏(时间戳) 强>
以下编辑处理每个SessionGuid只有一个(开始)行的情况......
Select s.[SessionGuid],
Coalesce(e.TimeStamp], getdate()) - s.[TimeStamp
From tblSequence s
Left Join tblSequence E
On e.[SessionGuid] = s.[SessionGuid]
And e.TimeStamp = (Select Max(TimeStamp)
From tblSequence
Where [SessionGuid] = s.[SessionGuid])
Where s.TimeStamp = (Select Min(TimeStamp)
From tblSequence
Where [SessionGuid] = s.[SessionGuid])