Я использую MS SQL Server, и у меня есть приведенная ниже таблица 'tmp_AVG_Weekly_Sales':
RowID SKU Shop Week Avg_Value LAMBDA PMF Value
1 ABC 200 2 1 2 0.13 NULL
2 DEF 250 2 2 4 0.018 NULL
3 XYZ 300 3 3 6 0.0024 NULL
Мне нужно обработать поле Значение на основе приведенной ниже логики - я использую курсор и цикл:
DECLARE @CUMULATIVE AS FLOAT = 0;
DECLARE @COUNT AS INT = 0;
DECLARE @LAMBDA AS FLOAT;
DECLARE @RowID AS INT;
DECLARE @PoissonCursor AS CURSOR;
DECLARE @THRESHOLD AS FLOAT = 0.99;
DECLARE @PMF AS FLOAT --= EXP(-@LAMBDA)
SET @PoissonCursor = CURSOR FOR
SELECT RowID
FROM
[tmp_AVG_Weekly_Sales]
OPEN @PoissonCursor;
FETCH NEXT FROM @PoissonCursor INTO @RowID;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @LAMBDA = LAMBDA FROM [tmp_AVG_Weekly_Sales] WHERE RowID = @RowID
SELECT @PMF = PMF FROM [tmp_AVG_Weekly_Sales] WHERE RowID = @RowID
WHILE (@CUMULATIVE < @Threshold)
BEGIN
SET @CUMULATIVE += @PMF
SET @COUNT += 1
SET @PMF = @PMF * (@LAMBDA / @COUNT)
END
UPDATE [tmp_AVG_Weekly_Sales] SET [Value] = @COUNT - 1 WHERE RowID = @RowID
FETCH NEXT FROM @PoissonCursor INTO @RowID;
END
Тем не менее, выше просто заполняет поле Значение с тем же значением:
RowID SKU Shop Week Avg_Value LAMBDA PMF Value
1 ABC 200 2 1 2 0.13 6
2 DEF 250 2 2 4 0.018 6
3 XYZ 300 3 3 6 0.0024 6
Когда я ожидаю ниже:
RowID SKU Shop Week Avg_Value LAMBDA PMF Value
1 ABC 200 2 1 2 0.13 6
2 DEF 250 2 2 4 0.018 9
3 XYZ 300 3 3 6 0.0024 12
Куда я иду не так?