我的两个表(“Faults”)列表示故障事件的开始(“01:10:2011 12:45:59”)和结束(作为开始的格式)。我的查询采用每个事件的平均持续时间(结束 - 开始)。
我想找到按月分组的事件的平均持续时间,记住时间戳以上述形式出现。所以,如果我的桌面活动是:
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 :(得分: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中的年份至关重要:-)
当然,如果一个故障跨越一个月的变化,您将需要决定做什么(归因于结束或开始月份的整个错误,还是应该拆分?)