来自前一行和其他列的 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)