【发布时间】:2021-09-22 04:01:53
【问题描述】:
除了使用游标或while循环检查当前行与下一行并更新当前行并通过数据集中的所有行执行此操作之外,还有其他方法吗?
例如,这是我们的表:
id date value
1 2020-09-01 00:00:00.000 0.00
2 2020-09-01 00:15:00.000 0.30
3 2020-09-01 00:30:00.000 0.00
4 2020-09-01 00:45:00.000 0.15
5 2020-09-01 01:00:00.000 0.20
6 2020-09-01 01:15:00.000 0.10
7 2020-09-01 01:30:00.000 0.10
8 2020-09-01 01:45:00.000 0.00
9 2020-09-01 02:00:00.000 0.00
declare @i int = 1, @new_value money = 0.3
while @i <= 10
begin
select @new_value = iif(value> (@new_value * 0.2) and value < @new_value,
value,
@new_value)
from table
where value >= 0.1
and id = @i + 1;
set @i = @i + 1
end
select @new_value -- Output will be 0.10
这个while循环遍历每一行并根据某些条件更新@new_value,然后检查下一行。
我想看看有没有办法不使用循环或游标并获得相同的结果。
【问题讨论】:
-
当您说
check the current row with the next row时,we have new value = 3的作用是什么?在表格中,您从未提及下一行的任何内容 -
用@Squirrel 的更多细节更新了问题。谢谢。
-
可以使用递归cte。
标签: sql tsql sql-server-2016