来自前一行和其他列的 teradata 中的计算列
compute columns in teradata from prevoius row and other columns
我有以下 table 格式,想根据其他两列计算最后一列:
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
第一行的最后一列 ARRV_TIME 是 (DEP_TIME + TRAV_TIME) 。从第二行 ARRV_TIME 计算为上一个值 + 当前行 TRAV_TIME.
例如:ARRV_TIME 的 1 行是 (5:25:00 +?) = 5:25:00。从第 2 行到其余计算为上一个结果 5:25:00 + 0:00:45 = 5:25:45 然后下一行是 5:25:45 + 0:00:43 = 5:26:28每个 LINE_NO 和 DIRECTION 依此类推。
您描述了累积和,这是分析函数的基本任务之一:
SUM(column TRAV_TIME is based on)
OVER (PARTITION BY LINE_NO, DIRECTION
ORDER BY SEQ_NO
ROWS UNBOUNDED PRECEDING)
将此添加到列 DEP_TIME
是基于然后应用间隔计算
result * INTERVAL '00:00:01' HOUR TO SECOND
如果您需要时间数据类型,这会产生间隔:
TIME '00:00:00' + (result * INTERVAL '00:00:01' HOUR TO SECOND)
我有以下 table 格式,想根据其他两列计算最后一列:
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
第一行的最后一列 ARRV_TIME 是 (DEP_TIME + TRAV_TIME) 。从第二行 ARRV_TIME 计算为上一个值 + 当前行 TRAV_TIME.
例如:ARRV_TIME 的 1 行是 (5:25:00 +?) = 5:25:00。从第 2 行到其余计算为上一个结果 5:25:00 + 0:00:45 = 5:25:45 然后下一行是 5:25:45 + 0:00:43 = 5:26:28每个 LINE_NO 和 DIRECTION 依此类推。
您描述了累积和,这是分析函数的基本任务之一:
SUM(column TRAV_TIME is based on)
OVER (PARTITION BY LINE_NO, DIRECTION
ORDER BY SEQ_NO
ROWS UNBOUNDED PRECEDING)
将此添加到列 DEP_TIME
是基于然后应用间隔计算
result * INTERVAL '00:00:01' HOUR TO SECOND
如果您需要时间数据类型,这会产生间隔:
TIME '00:00:00' + (result * INTERVAL '00:00:01' HOUR TO SECOND)