2015-02-06 112 views
2

快速的問題,我不能左右我的頭現在:減去值

我有一個表,名爲「liverace」,這是如下(節選):

racelap,pos,change,userid 
1  1 0  21 
1  2 0  12  
1  3 0  18 
2  1 0  18 
2  2 0  21 
2  3 0  12 

基本上,我有幾圈作爲賽車賽列出,其中每個用戶(擁有自己獨特的「用戶標識」)根據一些微積分得到一個分配位置(「pos」)。 我需要在這裏做的是有「更改」列,更新每圈,每個用戶反映位置的變化。 所以,我必須每圈和每個用戶即每個位置比較,它應該顯示:

racelap,pos,change,userid 
1  1 -  21 
1  2 -  12 
1  3 -  18 
2  1 +2  18 
2  2 -1  21 
2  3 -1  12 

第一圈沒有任何變化,因爲腿上0不存在。第二圈是它應該顯示位置變化的地方。

我一直在嘗試一些選擇,但沒有任何工作。 在此先感謝!

+2

這種事很難/醜在MySQL做。你最好做客戶端的計算。 – 2015-02-06 15:42:53

+0

@Farhang Amary這是一個表達,這意味着我不知道該怎麼做 – Staab 2015-02-06 15:46:40

回答

2
SELECT 
    so1.`lap`, 
    so1.`pos`, 
    COALESCE(so2.pos - so1.pos, "-") as `change`, 
    so1.user_id 
FROM 
    so so1 
    LEFT JOIN so so2 
    ON so2.lap = (so1.`lap` - 1) 
    AND so2.`user_id` = so1.`user_id` 

按預期工作。

lap  pos change user_id 
------ ------ ------ --------- 
    1  1 -    21 
    1  2 -    12 
    1  3 -    18 
    2  1 2    18 
    2  2 -1    21 
    2  3 -1    12 

假設下面的

CREATE TABLE `so` (
    `lap` int(11) DEFAULT NULL, 
    `pos` int(11) DEFAULT NULL, 
    `user_id` int(11) DEFAULT NULL 
) ENGINE=InnoDB 
+0

謝謝,我認爲這是訣竅! – Staab 2015-02-06 16:01:55