declare @startDate datetime declare @increment int declare @perfCounter nvarchar(100) declare @machineName nvarchar(100) declare @startOfTheDay datetime declare @numofpoints int -- set @perfCounter = '% Processor Time' set @perfCounter = 'Available Mbytes' set @machineName = 'CONTOSO' set @increment = 15 set @numofpoints = 100 set @startDate = DATEADD(minute, -1 * (@numofpoints + 1) * @increment, GETDATE()) -- set @startOfTheDay = DATEFROMPARTS(YEAR(@startDate), MONTH(@startDate), DAY(@startDate)) set @startOfTheDay = convert(datetime, (convert(varchar, @startDate, 112)), 112) print @startOfTheDay set @startDate = DATEADD(minute, Floor(DATEDIFF(minute, @startOfTheDay, @startDate)/@increment)*@increment, @startOfTheDay) SELECT top(@numofpoints) DATEADD(minute, Floor(DATEDIFF(minute, @startDate, pc.[LogTime])/@increment)*@increment, @startDate) LogTimeN ,pc.MachineName ,pcd.Counter ,avg(pc.[Value]) Avg ,min(pc.[Value]) Min ,max(pc.[Value]) Max FROM [dbo].[PerformanceCounters] pc inner join [dbo].[PerformanceCountersDefinitions] pcd on pcd.id=pc.[CounterId] where pcd.Counter = @perfCounter and pc.logtime >= @startDate and pc.MachineName = @machineName and pcd.Machine = @machineName group by DATEADD(minute, Floor(DATEDIFF(minute, @startDate, pc.[LogTime])/@increment)*@increment, @startDate) ,pc.MachineName ,pcd.Counter order by 1 desc