3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
SQL沒有內(nèi)置的順序概念,因此您需要按某一列進(jìn)行順序,這樣才有意義。像這樣:
select t1.value - t2.value from table t1, table t2
where t1.primaryKey = t2.primaryKey - 1
如果您知道如何對(duì)事物進(jìn)行排序,但不知道如何在給定當(dāng)前值的情況下獲得先前的值(例如,您要按字母順序進(jìn)行排序),那么我不知道在標(biāo)準(zhǔn)SQL中執(zhí)行此操作的方法,但是大多數(shù)SQL實(shí)現(xiàn)將具有擴(kuò)展做到這一點(diǎn)。
如果您可以對(duì)行進(jìn)行排序以使每個(gè)行都不同,則這是一種適用于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貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
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
添加回答
舉報(bào)