如何从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
等等。
那么有人可以帮我找到解决这个问题的最佳方案吗?
需要查询帮助
答案 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
试试这个。