【问题标题】:Populate column on PRECEDING calculation in Teradata填充 Teradata 中 PRECEDING 计算的列
【发布时间】: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 的新手。对此的任何了解都会有所帮助。

【问题讨论】:

    标签: teradata operator-precedence


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-10-09
      • 2021-06-23
      • 2015-08-31
      • 2014-07-01
      • 1970-01-01
      • 2018-10-12
      • 2018-01-08
      • 1970-01-01
      • 2017-08-18
      相关资源
      最近更新 更多