有没有办法在SELECT语句中访问“上一行”值?

我需要计算表的两行之间的列差。有什么办法可以直接在SQL中执行此操作?我正在使用Microsoft SQL Server 2008。


我正在寻找这样的东西:


SELECT value - (previous.value) FROM table

假设“上一个”变量引用了最近选择的行。当然,通过这样的选择,我最终将在具有n行的表中选择n-1行,这可能不是,实际上正是我所需要的。


有可能吗?


交互式爱情
浏览 630回答 3
3回答

慕的地8271018

SQL没有内置的顺序概念,因此您需要按某一列进行顺序,这样才有意义。像这样:select t1.value - t2.value from table t1, table t2 where t1.primaryKey = t2.primaryKey - 1如果您知道如何对事物进行排序,但不知道如何在给定当前值的情况下获得先前的值(例如,您要按字母顺序进行排序),那么我不知道在标准SQL中执行此操作的方法,但是大多数SQL实现将具有扩展做到这一点。如果您可以对行进行排序以使每个行都不同,则这是一种适用于SQL Server的方法:select  rank() OVER (ORDER BY id) as 'Rank', value into temp1 from tselect t1.value - t2.value from temp1 t1, temp1 t2 where t1.Rank = t2.Rank - 1drop table temp1如果需要打破平局,可以向ORDER BY添加尽可能多的列。

莫回无

WITH CTE AS (  SELECT    rownum = ROW_NUMBER() OVER (ORDER BY columns_to_order_by),    value  FROM table)SELECT  curr.value - prev.valueFROM CTE curINNER JOIN CTE prev on prev.rownum = cur.rownum - 1
打开App,查看更多内容
随时随地看视频慕课网APP