我真的很無知,因爲如何做到這一點。在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