2012-01-11 59 views
1

我有一張表格,基於100個用戶每個小時從一個網站存儲值。每個用戶每小時都在那裏,但可能會有更高/更低的值。找到兩行之間的最大差異

我想找出行之間的最大差異並輸出它們。

mysql_query("SELECT `username`,`energy` FROM `hoflevel`"); 

我知道我可以循環遍歷每個用戶的所有行並找到最高值,但這是太多的代碼。我確信有一種方法可以找出兩行之間最大的區別,按用戶名分組。它不一定只有每個小時。這就像「艾倫昨天上午5點創下了345,048能量的紀錄!」。

+0

所以這絕對是你想要的差異?對'SELECT用戶名,max(energy1-energy2)FROM hoflevel GROUP BY用戶名',其中'energy1'和'energy2'都是該''username'的'energy'的配對?如果一個給定的用戶目前在數據庫中只有一個「能量」值? – 2012-01-11 00:14:59

+0

對。能源1 - 能源2。忘記唯一的價值。 :P – AlanPHP 2012-01-11 00:19:30

回答

3

這得到的最大差在energy每個用戶,忽略用戶僅與單個記錄:

SELECT hoflevel.username, MAX(hoflevel.energy-h.energy) as maxDiff 
FROM hoflevel 
LEFT JOIN hoflevel h 
ON h.username=hoflevel.username AND hoflevel.energy>=h.energy 
WHERE h.energy IS NOT NULL 
GROUP BY hoflevel.username; 

基本上,它加入hoflevel到本身上username其產生與username一個表,並在每對energy值爲那個用戶。

然後求出按username分組的能量之間的最大差值。

注意,你可以進一步誰可以在數據庫中每次多條記錄,但在同一energy忽略用戶節省一些計算(因此他們maxDiff爲0),通過在連接條件改變>=>