3 回答
TA贡献1796条经验 获得超4个赞
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 t
select t1.value - t2.value from temp1 t1, temp1 t2
where t1.Rank = t2.Rank - 1
drop table temp1
如果需要打破平局,可以向ORDER BY添加尽可能多的列。
TA贡献1865条经验 获得超7个赞
WITH CTE AS (
SELECT
rownum = ROW_NUMBER() OVER (ORDER BY columns_to_order_by),
value
FROM table
)
SELECT
curr.value - prev.value
FROM CTE cur
INNER JOIN CTE prev on prev.rownum = cur.rownum - 1
添加回答
举报