在 Teradata 的 PRECEDING 计算中填充列
Populate column on PRECEDING calculation in Teradata
我有两个字段——日期和 OPR_DIST
,我需要计算 OPR_MILEAGE
For OPR_MILEAGE
– 如果 Null(?)
and Zero
in OPR_DIST
then ZERO
for OPR_MILEAGE
如果 OPR_DIST
不为零(例如:0.37
),我检查 Prev。记录(此处为 0)因此对应于 0.37
的 OPR_MILAGE
是 0
如果 OPR_DIST
不为零(例如:0.46
),我检查 Prev。记录(此处为 0.37
,不为零)因此 OPR_MILAGE
对应于 0.46
与 OPR_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的新手。对此有任何帮助。
如果有一列可以确定顺序(可能是时间戳),您只需检查前一行的值:
CASE WHEN MAX(OPR_DIST)
OVER (ORDER BY ??? -- previous row
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) > 0
THEN OPR_DIST
ELSE 0
END
我有两个字段——日期和 OPR_DIST
,我需要计算 OPR_MILEAGE
For OPR_MILEAGE
– 如果 Null(?)
and Zero
in OPR_DIST
then ZERO
for OPR_MILEAGE
如果 OPR_DIST
不为零(例如:0.37
),我检查 Prev。记录(此处为 0)因此对应于 0.37
的 OPR_MILAGE
是 0
如果 OPR_DIST
不为零(例如:0.46
),我检查 Prev。记录(此处为 0.37
,不为零)因此 OPR_MILAGE
对应于 0.46
与 OPR_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的新手。对此有任何帮助。
如果有一列可以确定顺序(可能是时间戳),您只需检查前一行的值:
CASE WHEN MAX(OPR_DIST)
OVER (ORDER BY ??? -- previous row
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) > 0
THEN OPR_DIST
ELSE 0
END