2011-10-24 77 views
0

我的兩個表(「Faults」)列表示錯誤事件的開始(「01:10:2011 12:45:59」)和結束(作爲開始的格式)。我的查詢需要每個事件的平均持續時間(結束開始)。sql - group by timestamp/month

我想查找按月記錄的事件的平均持續時間,記住時間戳是以上述形式出現的。所以,如果我的表的事件是:

A|SERVICE|  END  |  START 
1|ADSL |1/11/2011 10:00:00 |4/11/2011 10:00:00 
2|ADSL |6/11/2011 12:00:00 |6/11/2011 24:00:00 
3|ADSL |5/12/2011 10:00:00 |6/12/2011 10:00:00 
4|ADSL |7/12/2011 12:00:00 |8/12/2011 24:00:00 

的分類結果(以天爲單位)將成爲第11個月線1,2 ([3days+0.5day]/2= 1.75d)的平均持續時間,爲12個月的3,4的平均持續時間爲1.25天

NOVEMBER|1.75 
DECEMBER|1.25 
+0

你使用哪個SQL-DB? –

+0

等等,你是說你的'時間戳'不是實際的'時間戳'類型,而是一個格式化的字符串?如果是這樣,投資時間將需要您將數據庫轉換爲使用實際類型 - 即時轉換可能會花費相當長的時間(除了您沒有受到無效數據保護的事實... )。不同的DB以不同的方式處理時間戳 - 例如,DB2只能給你一個近似值(除非你做了一些可笑的重數學)。 –

回答

1

使用DATEPART獲得一個月值組:

SELECT DATENAME(month, MIN(Start)) AS [Month], DATEPART(YEAR, Start) As [Year], CONVERT(FLOAT, AVG(DATEDIFF(hour, Start,[End])))/24 AS [Days] 
    FROM Faults 
    GROUP BY DATEPART(Month, Start), DATEPART(Year, Start) 

包括GROUP BY年是至關重要的,如果你的數據跨越多個ÿ耳朵:-)

當然,如果故障跨越一個月的變化,你需要決定做什麼(爲歸屬於結束或開始月份全錯,還是應該被拆分?)