我有一张这样的桌子:rowInt Value2 233 4517 109 0....列的rowInt值是整数,但顺序不相同。我可以使用以下sql通过rowInt列出值:SELECT * FROM myTable ORDER BY rowInt;这将按rowInt列出值。如何获得两行之间Value的差,结果如下:rowInt Value Diff2 23 22 --45-233 45 -35 --10-459 0 -45 --0-4517 10 10 -- 10-0....该表在SQL 2005中(Miscrosoft)
3 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
SELECT rowInt, Value,
COALESCE(
(
SELECT TOP 1 Value
FROM myTable mi
WHERE mi.rowInt > m.rowInt
ORDER BY
rowInt
), 0) - Value AS diff
FROM myTable m
ORDER BY
rowInt
莫回无
TA贡献1865条经验 获得超7个赞
SQL Server 2012及更高版本支持LAG / LEAD函数来访问上一行或下一行。SQL Server 2005不支持此功能(在SQL2005中,您需要联接或其他方式)。
有关此数据的SQL 2012示例
/* Prepare */
select * into #tmp
from
(
select 2 as rowint, 23 as Value
union select 3, 45
union select 17, 10
union select 9, 0
) x
/* The SQL 2012 query */
select rowInt, Value, LEAD(value) over (order by rowInt) - Value
from #tmp
LEAD(value)将返回“ over”子句中给定顺序的下一行的值。
- 3 回答
- 0 关注
- 400 浏览
添加回答
举报
0/150
提交
取消