2016-10-13 3 views
1

私はシーケンス番号を持つテーブルを持っています。その非常に大きなテーブルは1600万行を与えるか、または取る。テーブルにはキーがあり、そのキーに発生するイベントがあります。キーが変更されるたびに、seq_numsは理論上再開します。teradataコスト効率の良い方法でテーブルを更新する

元のテーブルには、各イベントに関連付けられたタイムスタンプがありました。イベントの期間を取得するために、私は遅延列を作成し、現在のイベントのタイムスタンプから遅延列を差し引いて、期間を与えました。この時間は

以下の表にtime_in_minutesと呼ばれる新しいテーブルは、プロパティ

  • この場合、各キーは、ライン3車になるカテゴリを割り当てられている各イベントでの洗車での数を持っていました45分の乾燥手順に付した。
  • 23分を含む第2行は、実際には23分間の洗濯ではなく、機械を23分間稼動させる。
  • ID番号144には、マシンの電源が入っていません。これは私がタイプEventが前のレコードにスタートある場合SEQ_NUM 1にtime_in_minsを移動したい

    key  Event  time in mins seq_num 
    1  Start   0     1 
    1  Wash   23    2 
    1  Dry    45    3 
    1  Wash   56    4 
    1  Wash   78    5 
    1  Boil   20    6 
    1  ShutDown  11    7 
    2  Start   0     1 
    2  Wash   11    2 
    2  Dry    12    3 
    ------------------------------------------- 
    144  Wash   0     1 
    144  Wash   11    2 
    144  Dry    12    3 
    

をデータセットに流行のようです。私たちが集約ときに、この後の分はきちんと

私は試みることができるとtime_in_minsこの時のために別のタイムラグで再び新しい列を作成することによって、表を更新

の起動に割り当てられたが、これは は誰もが知っている、非常に高価であるように思われますこれを行う巧妙な方法の?

編集 14/10/2016

わずか順

key event  total minutes 
1 Start  23 
1 Boil  20 
1 Dry   45 
1 Wash  134 
1 ShutDown 11 
2 Start  11 
2 Dry   12 
2 Wash  0 

のうちにもかかわらず、顧客のための最終的な出力は以下のようであるあなたの助けをありがとう

+1

シーケンス番号1のみがあり、2がない場合はどうなりますか? – dnoeth

+0

これは非常に良い質問で、私が考えていなかった別のもの、つまりシーケンス番号1に0以外の値が入っていればどうなるでしょうか?私はこれを反映するために質問を更新します –

+0

あなたは本当にテーブルを更新したいのですか、または選択内の計算をしますか?あなたのTeradataリリースは何ですか?期待どおりの結果を追加できますか? Btw、1,600万行は大きなテーブルではありません:) – dnoeth

答えて

1

は、これが第一切り替わり、 2番目の値は説明に基づいており、その結果、説明文で単一のSTAT-stepが得られます。

SELECT key, seq_num, event, 
    CASE 
    WHEN seq_num = 1 
     AND Event = 'Start' 
     THEN Min(CASE WHEN seq_num = 2 THEN time_in_mins ELSE 0 END) 
      Over (PARTITION BY key) 
    WHEN seq_num = 2 
     AND Min(CASE WHEN seq_num = 1 THEN Event END) 
      Over (PARTITION BY key) = 'Start' THEN 0 
     ELSE time_in_mins 
    END AS new_time_in_mins 
FROM tab 

これで合計を行うことができます。

しかし、Voltile Tableを作成する前の手順でロジックを含めることができますが、このSelectも追加できますか?

+0

こんにちは@dnoeth、これは私が探していたものです。手伝ってくれてどうもありがとう –

関連する問題