从prevoius行和其他列计算teradata中的列

时间:2016-07-25 04:42:02

标签: concatenation teradata lag

我有以下表格格式,并希望根据其他两列计算最后一列:

   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计算为prev值+当前行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。

1 个答案:

答案 0 :(得分:3)

您描述了累积和,这是分析函数的基本任务之一:

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数据类型,则会产生Interval:

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