の各行をループIはセットベースのソリューションを見つける代わりに、SQL
KEY OUTAGE TIME POWER LINE ID
1 1/1 2:30 pm 75
2 1/5 4:00 pm 247
3 1/5 6:00 pm 247
4 1/3 8:00 am 11
KEYは、ちょうどテーブルの主キーであり、このようになり、停電情報を持つテーブルを持っています。停電時間は、停電が発生したときにわかり、電力線IDは停電が発生した回線の識別番号にすぎません。私はこのようになりますメーター情報、を有する第二のテーブルを持っている
、
event_ID event_timestamp event_info POWER LINE ID
44 1/5 1:45 pm power on 247
45 1/5 1:45 pm power on 247
46 1/5 3:45 pm fault detected 247
47 1/5 3:55 pm power off 247
48 1/5 3:58 pm power off 247
49 1/5 5:15 pm power on 247
50 1/5 5:45 pm power off 247
51 1/5 5:50 pm power off 247
52 1/5 5:55 pm power off 247
53 1/5 5:59 pm power off 247
目標は次のとおりです。各停電のため、停止時間前に電源ラインに起こった全てのメーターのイベントを選択しますその電源ライン上で発生した最新の「パワーオン」信号の後に、
たとえば、停電2の場合、1/5午後4時(停止時間)前にすべてのメーターイベントを確認しますが、これ以降1/5午後1時45分以降に発生したすべてのイベント停止前に発生した最新の「パワーオン」信号です。停電3の場合、1/5午後6時(停止時間)前に発生したすべてのイベントを調べますが、これは発生した最新の「電源投入」信号であるため1/5午後5時15分頃以降です停止時間の前に。
私は、停止テーブルをループし、イベントテーブルから目的のイベントを選択するストアドプロシージャを呼び出すカーソルでこれを行っていますが、これらのテーブルは非常に大きく、カーソルが長すぎます。私は、この問題にアプローチするセットベースの方法を知りたいと思います。ありがとう!
EDIT:申し訳ありませんが、サンプル出力を投稿するのを完全に忘れました。ここにあります。
KEY event_ID POWER LINE ID
2 46 247
2 47 247
2 48 247
3 50 247
3 51 247
3 52 247
3 53 247
EDIT(再び):私はOracleでこれに対する解決策を探しています。私は編集のために申し訳ありません、初めてここに質問を投稿します。
曖昧なDBMSタグが削除され、適切なものを含むように編集が保留されました。さまざまなデータベースシステムに固有の回答があります。 –
私はこの質問を理解していますか?あなたのテーブル内の ''停止 '行ごとに、停電タイムスタンプと最大の "パワーオン"タイムスタンプの間にタイムスタンプがあるものを除いて、すべての 'イベント'行**を選択しますか?もう1つの質問: 'OUTAGE TIME'と' event_timestamp'カラムのあなたのテーブルのデータ型は何ですか? –
@jpwサンプル出力を追加しました – user6147110