Я действительно не знаю, как это сделать.Получите среднее время от времени в SQL
Say моя таблица выглядит так:
MESSAGES
- id
- date_posted
- content
Как получить среднее время между проводками? (Date_posted)
Я действительно не знаю, как это сделать.Получите среднее время от времени в SQL
Say моя таблица выглядит так:
MESSAGES
- id
- date_posted
- content
Как получить среднее время между проводками? (Date_posted)
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
Попробуйте это:
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
К сожалению, это MS-SQL решение не MySql - Извинения только понял, что это то, что вы были после. Это может быть полезно кому-то другому.
В ответ на комментарий ниже - в 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
Приведенный выше код предполагает, что идентификаторы строго последовательны, что не всегда так. Более того, кто сказал, что идентификаторы были INT, а не GUID или VARCHAR, например? –
эй это работает! но это дает такое значение, как «16775640.3», что это за единица? как я могу конвертироваться в дни или часы? – Obay
@Obay: извините, был небольшой сбой, я обновил запрос. Это будет в секундах. – Quassnoi
wow thanks man! – Obay