如何基于sql中的条件使用先前计算的行的结果?

时间:2018-10-13 22:48:01

标签: sql presto

我有一个有两列的表; MovingAverage和基线已经填充。我想添加一个满足特定条件时将根据以前的计算值进行更新的计算列。我看过有关此的各种帖子,但是它们似乎并没有满足我的需求。

条件是:

if the current row moving average is >=1.13 * NewBaseline 
  then 1.15*Newbaseline 
  else Newbaseline

表格:

enter image description here

2 个答案:

答案 0 :(得分:0)

您需要类似的东西:

IF移动平均值> =(1.13 * NewBaseline)        1.15 * Newbaseline; 其他        新基线;

告诉我您是否正在寻找这样的东西。

答案 1 :(得分:0)

这是您的方案的更新递归查询

;WITH CTE AS
(
    SELECT m, MovAvg, BaseLine, BaseLine AS NewBaseline
      FROM MyTable
     WHERE m = 1

    UNION ALL

    SELECT t1.m, t1.MovAvg, t1.BaseLine, 
           CAST(CASE WHEN t1.MovAvg >= 1.13 * t2.NewBaseline THEN 1.15 * t2.NewBaseline ELSE t2.NewBaseline END AS decimal(10,2)) AS NewBaseline
      FROM MyTable t1 INNER JOIN CTE t2 ON t1.m = t2.m + 1
)
UPDATE t1
   SET NewBaseline = t2.NewBaseline
  FROM MyTable t1 INNER JOIN CTE t2 ON t1.m = t2.m