2017-07-27 4 views
1

PythonでSQLite/sqlalchemyを使用してSQLメソッドを作成しようとしていますが、mean、median、max、varなどの解析済みデータを含む新しいテーブルを作成しています生の時系列データを含む別のテーブルに基づいて、ある一定の時間間隔で実行される。時系列テーブルの時間ウィンドウ内で集計値を取得する

生データがあり、タイムスタンプが均等に分散していないとします。生データテーブルから、基本的に60秒のスライディング時間ウィンドウにわたる集計値であり、例えば:私は別のテーブルを取得したい

RAW: 
TIME  VALUE 
11:11:12 12 
11:11:22 24 
11:11:34 16 
11:12:21 18 
11:12:45 22 
11:13:03 15 

を私は取得したい:

ID WINDOW_TIME  MEAN   MEDIAN   MAX  VAR 
1  11:11 mean(12,24,16) med(12,24,16) ... 
2  11:12 mean(18,22)  ... 
3  11:13 ... 
... 

タイムスタンプに基づいてデータをどのようにグループ化できますか?

+0

あなたが使用している1つのデータベースのみで質問にタグを付けてください。 –

答えて

0

TIMEの列のタ​​イプが(https://dev.mysql.com/doc/refman/5.7/en/time.html)の場合は、次のようにグループ内でこれを行うことができます。

GROUP BY TIME_FORMAT(`TIME`, '%H:%i') 

一方、列が単なる文字列型の場合、物はちょっとトリッキーです。すべての値がhh:ii:ssの形式であることを保証できる場合は、SUBSTRINGを使用できます。

GROUP BY SUBSTRING(`TIME` FROM 1 FOR 5) 

これらのオプションのいずれかで行く場合は、しかし、私は本当に私はこれらの各オプションがあることを行っているかなり確信しているので、あなたは、データベース内のレコードの不足を持っていることを、あなたのために、願っていますパフォーマンス面でひどい。私は広範なテストを行っていませんが、どちらの例でもmysqlがインデックスを使用できるとは思いません。

正直なところ、すべてのクエリでこれを実行しようとしているよりも、各レコードに対してhh:iiという時間が含まれているテーブルを作成し、集計クエリにそのテーブルを使用する方がよいでしょう。

+0

ありがとう、男!私はちょうどhh:mmをタイムスタンプとして保存しようとしますが、パフォーマンスの低下は意味があります –

関連する問題