Я думаю, что ojblass ссылался на поле DataTime, которое вы пропустили в своем вопросе.
Фактический тип данных временной метки в MS SQL Server вводит в заблуждение по имени. Это не имеет ничего общего с датами и временем. Это двоичный «номер версии». Он используется в основном для решения проблем параллелизма при обновлении строки в таблице, но будет бесполезен для любых задач анализа.
Я бы предложил немного улучшить имена столбцов. Вызов столбца «DateTime» сбивает с толку и может вызвать проблемы при написании запросов, если вы не будете осторожны.
В любом случае ... запросы, которые вы ищете, варьируются от простых до довольно сложных, если они написаны непосредственно на TSQL.
Вот несколько примеров (я не проверял их синтаксис, поэтому они в лучшем случае "приблизительны"):
Среднее время для конкретного метода
select avg(TimeInMs) as AvgTime from Table
where ApplicaitonName = @ApplicationName
Среднее время для конкретного метода в течение последней 1 минуты
select avg(TimeInMs) as AvgTime from Table
where ApplicaitonName = @ApplicationName and
[DateTime] >= DATEADD(minute, -1, getdate())
В итоге вы захотите написать хранимые процедуры для большинства из них. Некоторые запросы, о которых вы говорите, потребуют некоторой группировки и тому подобного ... Я рекомендую вам получить книгу по TSQL, если вы пойдете по этому пути.
Если вы делаете это с помощью LINQ к SQL в вашем applicaiton, это не сильно отличается, но в целом LINQ проще написать (спорно, конечно).
Вот те же два запроса, использующие LINQ to SQL в C # (опять же, я не проверял их, поэтому я мог быть с незначительными синтаксическими ошибками).
var ctx = new MyDataContext();
var q = (from item in ctx.Table
where item.ApplicationName == "MyApplication"
select item.TimeInMs).Average();
var ctx = new MyDataContext();
var q = (from item in ctx.Table
where item.ApplicationName == "MyApplication" &&
item.DateTime <= DateTime.Now.AddMinutes(-1)
select new item.TimeInMs).Average();
То, как вы будете проводить анализ, зависит от того, какие технологии вы используете и что вы делаете с результатами.
Обновление:
В ответ на дополнительный вопрос из комментариев:
Я не могу придумать хороший способ справиться с этим, сохранив нужные временные интервалы в другой таблице, которая не становится слишком сложной (курсоры и динамически создаваемый TSQL с помощью команды Execture).
Более простой запрос, который дает желаемые результаты, может выглядеть в TSQL следующим образом (я не сторонник того, чтобы это был "лучший" способ, но он работает и работает довольно быстро).
select avg(TimeInMs) as AvgTime, 'Last 1 minute' as TimePeriod from Table
where ApplicaitonName = @ApplicationName and
[DateTime] >= DATEADD(minute, -1, getdate())
union
select avg(TimeInMs) as AvgTime, 'Last 2 minutes' as TimePeriod from Table
where ApplicaitonName = @ApplicationName and
[DateTime] >= DATEADD(minute, -2, getdate())
-- //repeat union as many times as needed for each time period