Требование таково. Мы хотим знать, как долго продлится количество товара с учетом прогноза на месяц + 1 к месяцу + x
Логика:
quantity / forecastNextMonth
но
if quantity > forecastNextMonth then
(1 + (quantity - forecastNextMonth)) / forecastNextMonth+2
Это должно быть применено и к месяцу + 3, так что это очень быстро запутывается в материалах дела.
if quantity > forecastNextMonth+2 then
(1 + (quantity - (forecastNextMonth + forecastNextMonth+2))) / forecastNextMonth+3
И окончательное решение также должно проверять наличие 0 значений bc деления на ноль ошибок.
Это пример sql для игры на скрипке.
Я не в своей лиге, чтобы выразить это лучше математически.
create table #Temp
(
Id int,
Quantity decimal(10,2),
Forecast decimal(10,2),
WhatEverTimeStamp datetime,
InventoryLasting decimal(4,2)
)
insert into #Temp
(Id, Quantity, Forecast, WhatEverTimeStamp)
VALUES
(1, 10, 0, '2019-01-01'),
(2, 20, 10, '2019-01-01'),
(3, 30, 30, '2019-01-01'),
(4, 100, 20, '2019-01-01'),
(5, 0, 10, '2019-01-01'),
(6, 0, 0, '2019-01-01')
;
SELECT
Id, Quantity, Forecast, WhatEverTimeStamp
, convert(decimal(4,2),
CASE WHEN Quantity > 0
THEN
CASE WHEN Quantity >= LEAD(Forecast, 1) OVER (PARTITION BY WhatEverTimeStamp ORDER BY WhatEverTimeStamp)
THEN
CASE WHEN LEAD(Forecast, 2) OVER (PARTITION BY WhatEverTimeStamp ORDER BY WhatEverTimeStamp) > 0
THEN
1 + ((Quantity - LEAD(Forecast, 1) OVER (PARTITION BY WhatEverTimeStamp ORDER BY WhatEverTimeStamp))
/
LEAD(Forecast, 2) OVER (PARTITION BY WhatEverTimeStamp ORDER BY WhatEverTimeStamp))
ELSE
CASE WHEN Forecast > 0 THEN Quantity / Forecast ELSE 0 END
END
ELSE
CASE WHEN Forecast > 0 THEN Quantity / LEAD(Forecast, 1) OVER (PARTITION BY WhatEverTimeStamp ORDER BY WhatEverTimeStamp) ELSE 99 END
--11
END
ELSE
0
END) AS InventoryLasting
FROM
#Temp
If(OBJECT_ID('tempdb..#temp') Is Not Null)
Begin
Drop Table #Temp
End
Для случая с идентификатором 4 это дело не является полным, потому что это будет слишком долго, я попытался описать его выше скрипки.
Решение, в котором используется средний прогноз, исключается требованием.