Я мигрирую с MySQL на SQL Server.Ниже приведен запрос, который был у меня в MySQL, но я не уверен, как заставить переменные работать в SQL Server.
SET @listid = 0;
SELECT
list_id, last_updated, price, daily_return,
@cumu_ret := ROUND(
IF (@listid = list_id,
IF(daily_return IS NULL, 1.0, @cumu_ret * (1 + daily_return)),
IF(daily_return IS NULL, 1.0, last_cumulative_return * (1 + daily_return))), 10) AS cumulative_return,
@listid := list_id AS set_id
FROM
daily_return
ORDER BY
list_id, last_updated
SQL Server имеет функцию SUM() OVER
, но в идеале мне нужно PRODUCT() OVER
.
Есть идеи, что я могу сделать?
РЕДАКТИРОВАТЬ: при попытке выполнить следующий запрос ...
DECLARE @listid int = 0;
DECLARE @cumu_ret decimal(24,10) = NULL;
SELECT
list_id, last_updated, price, daily_return,
@cumu_ret = ROUND(
IIF (@listid = list_id,
IIF(daily_return IS NULL, 1.0, @cumu_ret * (1 + daily_return)),
IIF(daily_return IS NULL, 1.0, last_cumulative_return * (1 + daily_return))), 10),
@listid = list_id
FROM
#daily_return
ORDER BY
list_id, last_updated
Выдает ошибку:
Оператор SELECT, который присваивает значение переменной, нельзя сочетать с операциями извлечения данных.
РЕДАКТИРОВАТЬ 2: оператор
A SELECT, которыйприсвоение значения переменной не должно сочетаться с операциями извлечения данных
ошибка - это симптом, а не моя главная проблема.Я не могу использовать ни один из предложенных обходных путей.
Я пытаюсь запустить функциональность PRODUCT() OVER
.По сути, в этом столбце я пытаюсь получить предыдущее совокупное возвращаемое значение и установить для новой строки значение предыдущего совокупного * (1 + daily_return).