在这种情况下如何使用 SQL 的滞后功能?
How to use lag function of SQL in this situation?
经过几个小时的尝试,我无法得到这个问题的答案。下面是我的专栏,我有计算 MSF 专栏值的公式。
Sr open high low closed MSF
-----------------------------------------------------
1 6107 6116.15 6022.3 6048.25 5214
2 6172.75 6181.05 6124.4 6146.35 Null
3 6141.35 6141.35 6062.35 6079.8 Null
4 6030.9 6051.2 5883.6 5904.6 Null
5 5901.3 5907.25 5740.95 5762.85 Null
6 5767.95 5842.6 5698.2 5754.1 Null
7 5800.05 5874.2 5711.3 5863.25 Null
8 5850.75 5857.75 5736.7 5751.9 Null
9 5752.1 5833.65 5639.65 5654.55 Null
我正在尝试填写名为 MSF 的最后一列。这是计算每行 MSF 值的公式
(closed - previous_value_of_MSF) x 0.33 + previous_value_of_MSF
我很难获得 MSF 的前一行值。请帮忙
帮助将不胜感激。提前致谢。
此任务无法以单一查询形式解决 - 它是迭代的。因此必须使用递归 CTE 或用户定义的变量(或 SP)。例如:
SET @msf:=0;
SELECT *,
@msf := CASE WHEN msf IS NULL
THEN (closed - @msf) * 0.33 + @msf
ELSE msf
END AS new_msf
FROM sourcetable
ORDER BY Sr
更新:
SET @msf:=0;
UPDATE sourcetable
SET MSF = ( @msf := CASE WHEN msf IS NULL
THEN (closed - @msf) * 0.33 + @msf
ELSE msf
END )
ORDER BY Sr;
PS。使用递归 CTE 似乎提供了更昂贵的解决方案。
经过几个小时的尝试,我无法得到这个问题的答案。下面是我的专栏,我有计算 MSF 专栏值的公式。
Sr open high low closed MSF
-----------------------------------------------------
1 6107 6116.15 6022.3 6048.25 5214
2 6172.75 6181.05 6124.4 6146.35 Null
3 6141.35 6141.35 6062.35 6079.8 Null
4 6030.9 6051.2 5883.6 5904.6 Null
5 5901.3 5907.25 5740.95 5762.85 Null
6 5767.95 5842.6 5698.2 5754.1 Null
7 5800.05 5874.2 5711.3 5863.25 Null
8 5850.75 5857.75 5736.7 5751.9 Null
9 5752.1 5833.65 5639.65 5654.55 Null
我正在尝试填写名为 MSF 的最后一列。这是计算每行 MSF 值的公式
(closed - previous_value_of_MSF) x 0.33 + previous_value_of_MSF
我很难获得 MSF 的前一行值。请帮忙 帮助将不胜感激。提前致谢。
此任务无法以单一查询形式解决 - 它是迭代的。因此必须使用递归 CTE 或用户定义的变量(或 SP)。例如:
SET @msf:=0;
SELECT *,
@msf := CASE WHEN msf IS NULL
THEN (closed - @msf) * 0.33 + @msf
ELSE msf
END AS new_msf
FROM sourcetable
ORDER BY Sr
更新:
SET @msf:=0;
UPDATE sourcetable
SET MSF = ( @msf := CASE WHEN msf IS NULL
THEN (closed - @msf) * 0.33 + @msf
ELSE msf
END )
ORDER BY Sr;
PS。使用递归 CTE 似乎提供了更昂贵的解决方案。