2016-05-25 7 views
0

Iは、整数としてのDateTimeとしてフィルタ列が

  1. timestamp
  2. channel_id
  3. value
  4. test_id

整数として小数で列の "読み" のテーブルを持っています今私はtest_idで行をフィルタリングしたい誰もできる。結果の行数が多すぎます。私がtest_id 17channel number 2,3 and 5を使用し、1秒ごとにデータを記録すると仮定すると、10kの行があります。

グラフをプロットすると、グラフの線がはっきりと見えないほど多くのデータが表示されるので、表示させるためにいくつかの行をフィルタリングする必要があります。

私は2つのレコードの時間差を持つ行のフィルタリングにいくつかの助けを必要とする秒数は10秒と言う必要があります。この場合、データは連続していません。

ご協力いただきますようお願い申し上げます。次のように

サンプルデータは次のようになります。

24-05-2016 08:00:55 am | 2 | 10.23 | 17 

24-05-2016 08:00:55 am | 3 | 100.23 | 17 

24-05-2016 08:00:55 am | 5 | 12.23 | 17 

24-05-2016 08:00:56 am | 2 | 09.23 | 17 

24-05-2016 08:00:56 am | 3 | 12.23 | 17 

24-05-2016 08:00:56 am | 5 | 11.23 | 17 

24-05-2016 08:00:57 am | 2 | 09.23 | 17 

24-05-2016 08:00:57 am | 3 | 01.23 | 17 

24-05-2016 08:00:57 am | 5 | 11.23 | 17 

24-05-2016 08:00:58 am | 2 | 09.23 | 17 

24-05-2016 08:00:58 am | 3 | 01.23 | 17 

24-05-2016 08:00:58 am | 5 | 11.23 | 17 
+0

あなたの期待どおりの結果は? – 1000111

+0

サンプルデータの結果はどうなりますか?そのあと10秒間の違いはありません。 –

+0

2秒以上の時間差を持つ行が必要な場合、データは各チャネル2,3,5で使用可能になり、最初のデータは24-05-2016 08:00:55に開始され、次のデータは次のようになります。 24-05-2016 08:00:57もう一度すべてのチャンネル2,3および5に対応しています。 –

答えて

1

の代わりにあなたは機能、GROUP BYを使用した期間のデータを集計することができフィルタリング。例えば、10秒の期間が、次の式を使用してタイムスタンプから計算することができる。

ROUND(UNIX_TIMESTAMP(timestamp)/10) 

したがって、この式は、クエリ、グループに追加することができるので、クエリがその期間にデータを集約することができる:

SELECT test_id,channel_id,ROUND(UNIX_TIMESTAMP(timestamp)/10), 
    min(value), max(value), avg(value),count(*) 
FROM your_table 
WHERE some_conditions 
GROPU BY test_id,channel_id,ROUND(UNIX_TIMESTAMP(timestamp)/10) 
+0

すばらしい@amaksr。 99.99%私の問題は、私が8秒間のデータを与える10秒の期間を試してみる以外は解決されます。私のデータは '2016-05-24 14:51:37'で始まるので、次のデータは10秒以上前でなければならないので、' 2016-05-24 14:51:47'以降になりますが、 「2016-05-24 14:51:45」のデータをスキップし、「2016-05-24 14:51:47」のデータをスキップします –

+0

あなたのソリューションはいくつかのクエリーで動作します。私は2秒の時にそれが私にも不要な行を与えるデータをしたい場合。改善の可能性はありますか? –