2016-03-04 66 views
0

我想獲得MySql中連續兩行之間的區別。我正在努力解決,但沒有運氣。這裏是圖像Mysql中連續行之間的區別

http://i.stack.imgur.com/keIdU.png

我需要成「差別」列「數據2」列的行和結果之間的差異中的數據。

感謝您的關注,非常感謝您的幫助。

-RAM

+0

什麼是從你給出的截圖你預期的效果? – sgeddes

+0

這些都是你的專欄嗎?有主鍵嗎? –

+0

預期的結果是「數據2」的差異(558-536),(578-558)等列結果。主鍵是application_id – IamRKY

回答

0

如果表有自動增量列「身份證」,我們可以通過ID順序,並確定下一行的值,並減去它

SELECT t1.*, t1.Data2-(SELECT t2.Data2 FROM `table_name` t2 WHERE t2.id > t1.id LIMIT 1) AS difference 
FROM `table_name` t1 
ORDER BY t1.id 

從下一行值

SELECT t1.*, t1.Data2-(SELECT t2.Data2 FROM `table_name` t2 WHERE t2.id < t1.id ORDER BY id DESC LIMIT 1) AS difference 
FROM `table_name` t1 
ORDER BY t1.id 
+0

試過了。但結果不是預期的。感謝您的支持。 – IamRKY

+0

我已經更新了我的答案。看看 –

+0

還是沒有運氣。再次感謝 – IamRKY

0

因爲你沒有在表中的唯一列,可以通過包括綁定變量[@rn &實現這一目標],其將唯一編號順序地添加到表中的每一行。

試試這個:

SELECT tab1.application_id, tab1.fiscal_year, tab1.data1, coalesce(cast(tab1.data2 as signed) - 
       cast(tab2.data2 as signed), tab1.data2) as diff 
    FROM 
     (SELECT b.application_id, @rn1:[email protected]+1 AS rank, b.fiscal_year, b.data1, b.data2 
     FROM your_table b, (SELECT @rn1:=0) t1) as tab1, 
     (SELECT a.application_id, @rn:[email protected]+1 AS rank, a.fiscal_year, a.data1, a.data2 
     FROM your_table a, (SELECT @rn:=0) t2) as tab2 
WHERE tab1.rank = tab2.rank + 1;