我真的很无知,因为如何做到这一点。在SQL中获取时间之间的平均时间
说我的表看起来像这样:
MESSAGES
- id
- date_posted
- content
我如何获得的贴子之间的平均时间? (date_posted)
我真的很无知,因为如何做到这一点。在SQL中获取时间之间的平均时间
说我的表看起来像这样:
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
上面的代码假定Ids是严格顺序的,但并非总是如此。此外,谁说,Ids是INT,而不是GUID或VARCHAR,例如? – 2010-02-10 13:53:35
嘿它工作!但它给出了一个像“16775640.3”这样的值是什么单位?我如何转换为几天或几小时? – Obay 2010-02-10 14:04:50
@Obay:对不起,有一点小故障,我更新了查询。这将在几秒钟内完成。 – Quassnoi 2010-02-10 14:09:36
哇感谢的人! – Obay 2010-02-10 14:17:55