2016-04-04 7 views
0

5年間のデータを含むテーブルに大きな時系列データセットがあります。データは非常に構造化されています。それは時間列でクラスター化/順序付けされており、この5年間全体にわたって正確に10分ごとに正確に1つのレコードが存在します。トリッキー:グラフ作成の時系列データのSQL Server側集計

私のユーザーサイドアプリケーションでは、400ピクセル幅の時系列チャートがあり、ユーザーは1時間から5年間の時間スケールを設定できます。したがって、400以上のレコードを返すこのチャートによるデータベースへのクエリは、物理的に表示できないデータを提供します。

私が知りたいのは、 SQLデータベースは、データベースが特定の時間範囲に対して照会されたときに、400以上のレコードを返さない適切な平均集計を動的に作成するようなアプローチを提案できますか?

例1):時間範囲が5年の場合、SQL Serverは4.5日ごとに〜1値を計算します(5yrs * 365days/400recordsが必要です)。したがって、各4.5日間のビンのすべての10分間のサンプルを平均し、各ビンのレコードを返します。合計約400名。

例2):時間範囲が1ヵ月の場合、SQL Serverは1.85時間ごとに〜1レコードを計算します(31日/ 400レコード)ので、1.85時間ごとに10分間のサンプルすべてを平均し、各ビンについて記録する。合計約400名。

私は理想的には、アプリケーションの観点から、静的な表のように照会できるソリューションがほしいと思います。

私は本当に提案されたアプローチやコードスニペットを感謝します。

+0

説明:time列のデータ型はdatetime2で、値の列はfloat型です。 –

+0

私が攻撃する方法を理解していない大きな課題は、ビンサイズが事前にクライアントに知られていないことです。タイムコードがstartTimeとendTimeの間にある場合は、theTableから値を選択します(擬似コード)。私は、このクライアント\インターフェイスは400レコードしか処理できないので、この時間間隔のレコード数を考慮して、どのような集計を行うべきかを知っています。 –

答えて

0

いくつかの例では、あなたはdatetime型の列(テーブルスキーマがないよう、あなたの質問とは全く明らかではない)がある場合:

Grouping into interval of 5 minutes within a time range

SELECT/GROUP BY - segments of time (10 seconds, 30 seconds, etc)

を彼らは非常に簡単にする必要がありますSQLサーバーに移植するには、datetime値をunixタイムスタンプに変換するためにdatediffを使用し、divの関数パラメータ<> 0を指定してround()を使用します。

+0

興味深い。私はあなたがdatetime列でグループ化できることを理解していませんでした。これを研究します。ありがとうございました。 –