sql - 按时间戳/月分组

时间:2011-10-24 18:25:27

标签: sql

我的两个表(“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

1 个答案:

答案 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中的年份至关重要:-)

当然,如果一个故障跨越一个月的变化,您将需要决定做什么(归因于结束或开始月份的整个错误,还是应该拆分?)