2012-01-11 2 views
1

100人のユーザーを基準にした1時間あたりの値を格納するテーブルがあります。各ユーザーは1時間ごとに表示されますが、値が高くても低くてもかまいません。2つの行の差が最も大きくなる

私は、行の中で最も高い違いを見つけ出して出力したいと考えています。

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

各ユーザーのすべての行をループして最高の値を見つけることができますが、それはあまりにも多くのコードです。ユーザー名でグループ化された2つの行の最大の違いを理解する方法があると確信しています。それは毎時だけである必要はありません。 "アランは昨日午前5時に345,048エネルギーの記録を設定しました!"のようになります。

+0

これは間違いなくあなたが望む違いですか? '' username'の 'energy'の' energy1'と 'energy2'のすべてのペアです' SELECT username、max(energy1-energy2)FROM hoflevel GROUP BY username'の一種ですか?そして、与えられたユーザがこれまでにデータベースに「エネルギー」の値を1つだけ持っていればどうでしょうか? –

+0

エネルギー1 - エネルギー2。唯一の価値を忘れてしまいます。 :P – AlanPHP

答えて

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; 

基本的には、username持つテーブルとenergy値のすべてのペアを生成username上の自身にhoflevelを結合そのユーザーのための

次に、usernameでグループ分けされたエネルギーの最大差を計算します。

注意、あなたはさらに結合条件に>>=を変更することにより、データベース内の複数のレコードを有することができるユーザーを無視することによって、いくつかの計算を保存するが、同じenergyたびに(そしてそのmaxDiffは0である)ことができます。

関連する問題