2012-01-11 77 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),通过在连接条件改变>=>