2017-11-14 17 views
2

電力系統の時系列データを解析しており、特定のブール値フラグを満たす連続したデータ点を見つけようとしています。開始時刻と終了時刻に従って条件を満たす時系列をグループ化するSQL

私は擬似SQLを実行するに取り掛かる必要がありますどのように値が1から0に変更し、前記変曲点に対応する開始時間と終了時間を返すことによって、このテーブルを照会したい、と0から1へ

う下のコードですか?

SELECT Time 
FROM InputTable 
WHERE InputTable.Value = 1 
INTO OutputTable??, TimeStart??, TimeEnd??; 

入力:

+-------+---------+------+ 
| Index | Time | Value| 
+-------+---------+------+ 
|  0 | 00:00:01| 1 | 
|  1 | 00:00:02| 1 | 
|  2 | 00:00:03| 1 | 
|  3 | 00:00:04| 0 | 
|  4 | 00:00:05| 1 | 
|  5 | 00:00:06| 1 | 
|  6 | 00:00:07| 0 | 
|  7 | 00:00:08| 1 | 
+-------+---------+------+ 

出力:

+-------+-----------+----------+ 
| Index | TimeStart | TimeEnd | 
+-------+-----------+----------+ 
|  0 | 00:00:01 | 00:00:03 | 
|  1 | 00:00:05 | 00:00:06 | 
|  2 | 00:00:08 | 00:00:08 | 
+-------+-----------+----------+ 

答えて

1

あなたはグループに隣接して "1" に基づいて値を必要とします。これは、MS Accessで扱いにくいです。 Accessで使用できる1つの方法は、各行の前に「0」(または「1」以外の値)の数を数えることです。

select ind, min(time), max(time) 
from (select t.*, 
      (select 1 + count(*) 
       from inputtable as t2 
       where t2.value = 0 and t2.time < t.time 
      ) as ind 
     from inputtable as t 
    ) as t 
where value = 1 
group by ind 
+0

サンプルコードがどのように動作するかを分析して、最終的にグループの背後にある直観とサブクエリを得ることができました。 (ちょうどあなたの本をチェックアウト、素晴らしいレビュー!確かにコピーを取得するつもりです。) –

関連する問題