2017-12-11 35 views
0

興味深い問題が発生しました。私は実稼働環境内の特定のイベントにエネルギー使用量ログを結びつけようとしています。当社の生産データは約6ヶ月間ロギングされ、ロギングされたデータは30秒ごとまたは変更時にレコードを挿入します。私は開始と終了のタイムスタンプ私を持っていたらSQL Serverで特定の条件が連続している開始時刻と終了時刻を確認する方法

row mode start_t_stamp  end_time_stamp 
------------------------------------------------------ 
1  10  11/12/17 21:00:00 11/12/17 21:00:30 
2  80  11/12/17 21:01:00 12/12/17 03:04:30 
3  10  12/12/17 03:05:00 12/12/17 03:06:30 

:私のような結果を返すために、クエリを希望

t_stamp    tag  value 
---------------------------------- 
11/12/17 21:00:00 mode 10 
11/12/17 21:00:30 mode 10 
11/12/17 21:01:00 mode 80 
11/12/17 21:01:30 mode 80 
11/12/17 21:02:00 mode 80 
11/12/17 21:02:30 mode 80 
….     mode 80 
12/12/17 03:03:30 mode 80 
12/12/17 03:04:00 mode 80 
12/12/17 03:04:30 mode 80 
12/12/17 03:05:00 mode 10 
12/12/17 03:05:30 mode 10 
12/12/17 03:06:00 mode 10 
12/12/17 03:06:30 mode 10 

:これらのログ「ファクトリーモード」の中にも次のような構造で記録されますアイドリング、ウォームアップ、ready_standby、製造などの各モードのエネルギー使用量データを抽出し、各モードの平均使用量を作成することができますが、すべての最初のステップで固執しています。パーティションを見て、島やギャップについての記事を読んでいますが、このようにデータがどこに記録されるかはわかりません。どんな提案もすばらしいです

答えて

1

ギャップと島の問題です。あなたが可能なウィンドウ関数を持っているなら、あなたは以下の

select value, 
     min(t_stamp) start_t_stamp , 
     max(t_stamp) end_time_stamp 
from 
(
    select *, row_number() over (partition by value order by t_stamp) - 
       row_number() over (order by t_stamp) grn 
    from data 
) t 
group by value, grn 

を使用することができます基本的な考え方は同じvalueとその結果としての行が同じgrnを持っているということです。あなたがこれを持っているときに、それらを簡単にグループ化することができます。

関連する問題