我有以下表格格式,并希望根据其他两列计算最后一列:
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。
答案 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)