2010-02-10 4 views
1

사이입니다.이 작업을 수행하는 방법에 관해서는 정말 단서가 없습니다. 내가 게시물 사이의 평균 시간을 얻을 어떻게평균 시간은 SQL

MESSAGES 
- id 
- date_posted 
- content 

:

내 테이블과 같이 보이는 말? (date_posted)

답변

2
SELECT AVG(period) 
FROM (
     SELECT TIME_TO_SEC(TIMEDIFF(@date_posted, date_posted)) AS period, 
       @date_posted := date_posted 
     FROM (
       SELECT @date_posted := NULL 
       ) vars, 
       messages 
     ORDER BY 
       date_posted 
     ) q 
+0

안녕하세요! 그러나 그것은 "16775640.3"과 같은 가치를 부여합니다. 어떻게 요일이나 시간으로 변환합니까? – Obay

+0

@ Obay : 죄송합니다. 약간의 결함이있어서 쿼리를 업데이트했습니다. 이것은 수초 내에 있습니다. – Quassnoi

+0

와우, 고마워! – Obay

1

이 시도 : 죄송합니다

SELECT AVG(DATEDIFF(s, M2.Date_Posted, M1.Date_Posted)) as AverageSeconds 
    FROM Messages M1 INNER JOIN Messages M2 ON M1.Id = M2.Id+1 

이되지 MySQL은 MS-SQL 솔루션입니다 - 사과는 그냥 당신이 후에 무엇인지 깨달았다. 이것은 다른 누군가에게 유용 할 수 있습니다.

아래의 주석에 대한 응답으로 - SQL Server 2005 또는 2008 - Row_Number를 사용하여 순차적 인 고유 키를 생성하므로 순차적 또는 사실적인 정수 기본 키에 대한 가정이 없으므로 다음 방법이 더 나은 솔루션입니다.

SELECT AVG(DATEDIFF(s, M2.Date_Posted, M1.Date_Posted)) as AverageSeconds 
    FROM (SELECT ROW_NUMBER() OVER(ORDER BY Date_Posted ASC) as Id, Date_Posted FROM 
      Messages) M1 
    INNER JOIN (SELECT ROW_NUMBER() OVER(ORDER BY Date_Posted ASC) as Id, Date_Posted 
      FROM Messages) M2 ON M1.Id = M2.Id+1 
+1

위의 코드에서는 Id가 엄격하게 순차적이라고 가정합니다. 게다가, 누가 ID가 INTs이고 GUID 나 VARCHAR가 아니라고 말했습니까? –