2016-07-25 26 views
0

Ich habe die untenstehende Tabelle Format und wollte die letzte Spalte berechnen, basierend auf anderen zwei Spalten:Rechen Spalten in teradata von prevoius Reihe und anderen Spalten

BASE_VERSION JOURNEY_NO LINE_NO DIRECTION OP_DEP_NO SEQ_NO BLOCK_NO DEP_TIME TRAV_TIME ARRV_TIME 
20,160,603 33,263 176 1 2 1 21,760,010 5:25:00 ? 5:25:00 
20,160,603 33,263 176 1 2 2 21,760,010 5:25:00 0:00:45 5:25:45 
20,160,603 33,263 176 1 2 3 21,760,010 5:25:00 0:00:43 5:26:28 
20,160,603 33,263 176 1 2 4 21,760,010 5:25:00 0:00:47 5:27:15 
20,160,603 33,263 176 1 2 5 21,760,010 5:25:00 0:00:59 5:28:14 
20,160,603 33,263 176 1 2 6 21,760,010 5:25:00 0:01:31 5:29:45 
20,160,603 33,263 176 1 2 7 21,760,010 5:25:00 0:01:08 5:30:53 
20,160,603 33,263 176 1 2 8 21,760,010 5:25:00 0:01:37 5:32:30 
20,160,603 33,263 176 1 2 9 21,760,010 5:25:00 0:00:48 5:33:18 
20,160,603 33,263 176 1 2 10 21,760,010 5:25:00 0:01:02 5:34:20 
20,160,603 33,263 176 1 2 11 21,760,010 5:25:00 0:00:38 5:34:58 
20,160,603 33,263 176 1 2 12 21,760,010 5:25:00 0:01:18 5:36:16 
20,160,603 33,263 176 1 2 13 21,760,010 5:25:00 0:00:58 5:37:14 
20,160,603 33,263 176 1 2 14 21,760,010 5:25:00 0:00:47 5:38:01 

Letzte Spalte ARRV_TIME für erste Zeile (DEP_TIME + TRAV_TIME). von der zweiten Reihe wird ARRV_TIME als der vorherige Wert + aktuelle Reihe TRAV_TIME berechnet.

zB: 1 ​​Reihe für ARRV_TIME ist (5:25:00 +?) = 5:25:00. von 2 Reihe zur Ruhe wird berechnet als prev Ergebnis, das ist 5:25:00 + 0:00:45 = 5:25:45 dann nächste Reihe ist 5:25:45 + 0:00:43 = 5:26:28 und so weiter für jede LINE_NO und DIRECTION.

+0

Was ist der Datentyp von denen Säulen? Wie wird die Bestellung festgelegt? – dnoeth

+0

@dnoeth Die Datentypen sind dezimal. Die Reihenfolge kann durch eine Sequenz bestimmt werden. verpasste Seq. Spalte in der Frage.Now aktualisiert den Datensatz mit Seq. Spalte – RUser

+0

Sie suchen also eine laufende Summe, im Grunde? Welche Spalte (n) bilden den Schlüssel, wenn Sie so wollen? Zusätzlich sind die Datentypen 'DEP_TIME' und' TRAV_TIME' dezimal? Die sehen für mich mal aus ... – Andrew

Antwort

3

Sie beschreiben eine kumulative Summe, eine der grundlegenden Aufgaben für eine analytische Funktion:

SUM(column TRAV_TIME is based on) 
OVER (PARTITION BY LINE_NO, DIRECTION 
     ORDER BY SEQ_NO 
     ROWS UNBOUNDED PRECEDING) 

hinzufügen Zu der Spalte DEP_TIME auf basiert und dann

result * INTERVAL '00:00:01' HOUR TO SECOND 
das Intervall Berechnung

Dies gilt führt zu einem Intervall, wenn Sie einen Zeit-Datentyp benötigen:

TIME '00:00:00' + (result * INTERVAL '00:00:01' HOUR TO SECOND)