2014-03-26 25 views
0

比方說,我有類似的表:選擇行,而每一行與前一個作爲參數進行操作

+-------+ 
| FIELD | 
+-------+ 
| 1000 | 
| 1200 | 
| 1300 | 
| 900 | 
| 1400 | 
+-------+ 

我怎麼能執行SELECT查詢檢索行0..N,而是中得到他們的價值觀,與每行的前一行,i。即RESULT(N) = ROW(N) - ROW(N-1)?我期望得到像這樣的東西:

+--------------+ 
| RESULT  | 
+--------------+ 
| (EMPTY OR 0) | 
| 200   | 
| 100   | 
| -400   | 
| 500   | 
+--------------+ 

我正在使用DB2。如果您向我提供一些不特定於特定SQL DBMS的便攜式響應,那將非常酷。

在此先感謝!

+0

任何主鍵? –

+0

@ThitLwinOo:不,還沒有主鍵。 –

回答

2

你需要的是LAG函數。它存在於多種數據庫,包括

語法將是這樣的

SELECT CASE WHEN LAG(MyField, 1) OVER (PARTITION BY MyID ORDER BY SomeThing) IS NULL THEN 0 
      ELSE MyField - LAG(MyField, 1) OVER (PARTITION BY MyID ORDER BY SomeThing) 
     END AS Result 
    FROM MyTable 

Documentation on LAG from IBM

+1

太棒了!謝謝! –

+1

讀者應該明白這個答案是特定於平臺的,並且僅適用於DB2 for LUW,而不適用於z/OS或IBM i。 – WarrenT

+0

讀者還應該知道,問題中的示例數據庫沒有列出要訂購的列;因此沒有保證返回一組結果。 –