如何获取上一行值

Gop*_*pal 5 sql sql-server sql-server-2005

如何从SELECT语句的上一个结果行获取值

如果我们有一个名为cardevent的表并且有行[ID(int),Value(Money)]并且我们有一些行,例如

ID --Value

1------70 
1------90
2------100
2------150
2------300 
3------150 
3------200 
3-----250 
3-----280
Run Code Online (Sandbox Code Playgroud)

等......

如何创建一个查询,获取每个行ID,值和上一个行值,其中数据显示如下

ID --- Value ---Prev_Value

1 ----- 70 ----------  0 
1 ----- 90 ---------- 70
2 ----- 100 --------  90 
2 ------150 -------- 100
2 ------300 -------- 150
3 ----- 150 -------- 300 
3 ----- 200 -------- 150 
3 ---- 250 -------- 200 
3 ---- 280 -------- 250
Run Code Online (Sandbox Code Playgroud)

等等.

那么任何人都可以帮我找到解决这个问题的最佳解决方案吗?

需要查询帮助

Roy*_* T. 6

您必须自己加入表,我不确定这是否是100%合法的SQL,但我目前没有SQL-Server尝试这个,但试试这个:

select (ID, Value) from table as table1 join
inner join table as table2
on table1.ID = (table2.ID -1)
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用 LAG() 和 LEAD() 函数来获取上一个和下一个值。

SELECT 
   LAG(t.Value) OVER (ORDER BY t.ID) PreviousValue,
   t.value Value,
   LEAD(t.value) OVER (ORDER BY t.ID) NextValue
FROM table t

GO
Run Code Online (Sandbox Code Playgroud)


小智 5

SELECT t.*, LAG(t.Value) OVER (ORDER BY t.ID) FROM table AS t

这应该工作.Lag函数获取特定列的上一行值.我想这就是你想要的.