Как использовать результат предыдущей вычисляемой строки на основе условия в SQL? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть таблица с двумя столбцами;MovingAverage и Baseline уже заполнены.Я хочу добавить вычисляемый столбец, который будет обновляться на основе предыдущего вычисленного значения при выполнении определенного условия.Я просмотрел различные посты по этому поводу, но они, кажется, не касаются того, что мне нужно.

Условие таково:

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

Таблица:

enter image description here

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Это рекурсивный запрос на обновление для вашего сценария

;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 
0 голосов
/ 14 октября 2018

Вам нужно что-то вроде:

IF movingaverage> = (1.13 * NewBaseline) 1.15 * Newbaseline;ELSE Newbaseline;

Скажите, если это что-то подобное, что вы ищете.

...