如何获取上一行值

时间:2011-02-01 07:34:12

标签: 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

等......

如何制作一个查询,以获取每个行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

等等。

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

需要查询帮助

4 个答案:

答案 0 :(得分:5)

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

select (ID, Value) from table as table1 join
inner join table as table2
on table1.ID = (table2.ID -1)

答案 1 :(得分:5)

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

这应该有效。 Lag函数获取特定列的上一行值。我想这就是你想要的。

答案 2 :(得分:3)

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

SELECT t.Value OVER (ORDER BY t.ID) PREVIOUS_VALUE,
t.value VALUE,
LEAD(t.value) OVER (ORDER BY t.ID) NEXT_VALUE
FROM TABLE T

GO

答案 3 :(得分:0)

select t1.value - t2.value from table t1, table t2 
where t1.primaryKey = t2.primaryKey - 1

试试这个。