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に関する本を入手することをお勧めします。
アプリケーション内でLINQtoSQLを使用してこれを行っている場合、それほど違いはありませんが、一般的にLINQの方が記述が簡単です(もちろん議論の余地があります)。
これは、C#でLINQ to SQLを使用した同じ2つのクエリです(ここでも、これらをテストしていないため、構文エラーが発生する可能性があります)。
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();
分析をどのように行うかは、使用しているテクノロジーと結果で何をしているかによって異なります。
更新:
コメントからのフォローアップ質問への回答:
非常に難しくならない別のテーブル(カーソルとExectureコマンドを介して動的に構築されたTSQL)に目的の時間間隔を格納することで、それを処理する良い方法を考えることはできません。
必要な結果を取得する単純なクエリは、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