猿问

如何获得列字段的两行之间的差异?

我有一张这样的桌子:


rowInt  Value

2       23

3       45

17      10

9       0

....

列的rowInt值是整数,但顺序不相同。我可以使用以下sql通过rowInt列出值:


SELECT * FROM myTable ORDER BY rowInt;

这将按rowInt列出值。如何获得两行之间Value的差,结果如下:


rowInt   Value Diff

2        23    22    --45-23

3        45    -35   --10-45

9        0     -45   --0-45

17       10    10    -- 10-0

....

该表在SQL 2005中(Miscrosoft)


繁花如伊
浏览 401回答 3
3回答

慕标5832272

SELECT rowInt, Value,       COALESCE(       (       SELECT TOP 1 Value       FROM myTable mi       WHERE mi.rowInt > m.rowInt       ORDER BY             rowInt       ), 0) - Value AS diffFROM  myTable mORDER BY      rowInt

莫回无

SQL Server 2012及更高版本支持LAG / LEAD函数来访问上一行或下一行。SQL Server 2005不支持此功能(在SQL2005中,您需要联接或其他方式)。有关此数据的SQL 2012示例/* Prepare */select * into #tmpfrom(    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 #tmpLEAD(value)将返回“ over”子句中给定顺序的下一行的值。
随时随地看视频慕课网APP
我要回答