AVG время, проведенное на нескольких строках SQL-сервера? - PullRequest
0 голосов
/ 25 мая 2010

У меня есть таблица tblSequence с 3 столбцами в MS SQL: 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

Идентификатор уникален, количество IP-адресов может быть n.

Хотите рассчитать среднее время, потраченное на IP. в один ряд

Знай, что ты можешь сделать что-то вроде этого:

SELECT CAST(AVG(CAST(MyTable.MyDateTimeFinish - 
         MyTable.MyDateTimeStart AS float)) AS datetime)

Но как же я могу найти первую и последнюю запись моей уникальной строки IP, чтобы у меня было время начала и окончания? Я застрял.

Хотел бы рассчитать среднее время, потраченное на IP. в один ряд

Ответы [ 2 ]

1 голос
/ 25 мая 2010

Если у вас есть атрибут (столбец), который вы можете использовать для связывания строк (например, 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)

используя год sql из комментария: Исправлено в первой строке e.TimeStamp - s. [SessionGuid]

должно быть e.TimeStamp - s. [ TimeStamp ]

и в последнем подзапросе:

MimeStamp )

должно быть

Min (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]) 
1 голос
/ 25 мая 2010

Но как же я могу найти первый и последняя запись моей уникальной строки IP так Я могу иметь время начала и окончания? Я застрял.

Select IP, MIN([Timestamp]) as MinTime,  Max([Timestamp]) as MaxTime
from your table
group by IP
...