2012-10-17 51 views
4

我有一個單列的表。列是這樣的:MySQL添加前一行的值

1 
2 
3 
4 
5 
... 

我想創建一個查詢,將顯示其他列,將有添加到它以前的值。所以:

1 1 (0 + 1) 
2 3 (1 + 2) 
3 5 (2 + 3) 
4 7 (3 + 4) 
5 9 (4 + 5) 
9 14 (5 + 9) 
45 54 (9 + 45) 

我該如何構建一個查詢來完成該操作?

本質上,我只是想要ROW[X]ROW[X-1]之間的difference

+0

尼克我剛剛刪除的答案,因爲我沒有測試,它顯示了你想要什麼不同的結果。你能解釋一點點還是提供更好的例子。這是我以前的代碼'SELECT a.val,(@runtot:= @runtot + a.val)AS rt FROM table1 a,(SELECT @runtot:= 0)c'。謝謝。 –

+0

我只想獲取上一行的值並將其添加到當前行的值並將其顯示在新列中。多數民衆贊成 – nick

+0

我更新了我的問題 – nick

回答

12
SELECT a.val, (@runtot := a.val + @runtot) AS rt, (@runtot := a.val) ne 
FROM Table1 a,(SELECT @runtot:=0) c 

這似乎是工作輸出。我試圖在每個階段重新變量變量。 試一試。

SQLFiddle Demo

+2

我真的想出了那個。我唯一不能做的就是返回'rt',而不是'ne' ..這是子查詢 – nick

+1

是真的。 Thanx :) 我很高興得到upvote回答我的第一個聲譽:) – jaipster

+1

grats :)歡迎來到SO – nick

-1

TRY

SELECT a.int, (@runtot := a.int + a.int - 1) AS rt 
FROM test a,(SELECT @runtot:=0) c 

1 1 (0 + 1) 
2 3 (1 + 2) 
3 5 (2 + 3) 
4 7 (3 + 4) 
5 9 (4 + 5) 

這將導致你出

+0

中的例子,雖然這完成了在這個例子中的東西,在我的實際情況下,數字可能會跳過這會失算。這就是爲什麼我需要記錄最後一行的價值。我應該更加明確地表示抱歉 – nick

+0

錯誤的邏輯:http://sqlfiddle.com/#!2/8eff6e/1 – hims056