填充 Teradata 中 PRECEDING 计算的列

Posted

技术标签:

【中文标题】填充 Teradata 中 PRECEDING 计算的列【英文标题】:Populate column on PRECEDING calculation in Teradata 【发布时间】:2016-08-15 07:45:39 【问题描述】:

我有两个字段——日期和OPR_DIST,我需要计算OPR_MILEAGE

对于OPR_MILEAGE – 如果Null(?)ZeroOPR_DIST 中,那么ZERO 对于OPR_MILEAGE

如果 OPR_DIST 不为零(例如:0.37),我会检查 Prev。记录(这里是 0)因此对应于0.37OPR_MILAGE0

如果 OPR_DIST 不为零(例如:0.46),我会检查 Prev。记录(这里是0.37,不为零)因此对应于0.46OPR_MILAGEOPR_DIST相同,即0.46

所以在任何时候,如果我之前的记录是zero,我当前的OPR_MILEAGE 值是zero,否则OPR_DIST。我使用的版本是 TD 13

DATE    OPR_DIST    OPR_MILEAGE
6/10/2016   ?       ?
6/10/2016   0       0
6/10/2016   0       0
6/10/2016   0       0
6/10/2016   0       0
6/10/2016   0       0
6/10/2016   0       0
6/10/2016   0.37    0
6/10/2016   0.46    0.46
6/10/2016   0.47    0.47
6/10/2016   0       0
6/10/2016   0.32    0
6/10/2016   0.37    0.37
6/10/2016   0.47    0.47
6/10/2016   0.56    0.56
6/10/2016   0.32    0.32
6/10/2016   0.26    0.26
6/10/2016   0       0
6/10/2016   0.3     0
6/10/2016   0       0
6/10/2016   0.36    0
6/10/2016   0.25    0.25
6/10/2016   0.25    0.25
6/10/2016   0       0
6/10/2016   0       0
6/10/2016   0       0
6/10/2016   0.46    0
6/10/2016   0.24    0.24
6/10/2016   0       0
6/10/2016   0.33    0
6/10/2016   0       0
6/10/2016   0       0

我是 TD 的新手。对此的任何了解都会有所帮助。

【问题讨论】:

【参考方案1】:

如果有确定顺序的列(可能是时间戳),则只需检查上一行的值:

CASE WHEN MAX(OPR_DIST)
          OVER (ORDER BY ???    -- previous row 
                ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) > 0
     THEN OPR_DIST
     ELSE 0
END

【讨论】:

以上是关于填充 Teradata 中 PRECEDING 计算的列的主要内容,如果未能解决你的问题,请参考以下文章

Teradata SQL VARCHAR 和空格

如何填充在 JavaFx Scene Builder 中设计的 fxml 文件中定义的 TableView

MySQL - Found option without preceding group in config file

teradata建表DDL

SQL - 在填充另一列时继承派生列值

Hive sum over partition preceding following 累计求和