0

我在 MS SQL 中有一个包含 3 个列的表 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 花费的平均时间。在单行中

4

2 回答 2

1

但是我到底如何找到我的唯一 IP 行的第一个和最后一个条目,以便我可以有一个开始和结束时间?我被困住了。

Select IP, MIN([Timestamp]) as MinTime,  Max([Timestamp]) as MaxTime
from your table
group by IP
于 2010-05-25T18:17:54.050 回答
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 sql:修复第一行,e.TimeStamp - s.[SessionGuid]

应该是 e.TimeStamp - s.[ TimeStamp ]

在最后一个子查询中:

哑剧邮票

应该

最小(时间戳)

下面编辑以处理每个 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]) 
于 2010-05-25T18:41:23.130 回答