2012-01-11 3 views
1

사용자 100 명 기준으로 웹 사이트에서 매시간 값을 저장하는 테이블이 있습니다. 각 사용자는 매시간 있지만 더 높거나 낮은 값을 가질 수 있습니다.두 행의 차이가 가장 큽니다.

행간에 가장 높은 차이점을 찾고 출력하고 싶습니다.

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

나는 각 사용자의 모든 행을 순환하여 최고 값을 찾을 수 있지만 너무 많은 코드입니다. 사용자 이름별로 그룹화 된 두 행 간의 가장 큰 차이점을 파악할 수있는 방법이있을 것입니다. 매시간 일 필요는 없습니다. "앨런은 어제 오전 5시 345,048 에너지의 기록을 세웠습니다!"이 될 것입니다.

+0

확실히 차이가 있습니까? 'SELECT username, max (energy1-energy2) FROM hoflevel GROUP BY username'의 정렬. 여기서'energy1'과'energy2'는'username'의'energy'의 모든 쌍입니까? 그리고 만약 주어진 사용자가 지금까지 데이터베이스에서 단지 하나의 '에너지'값만을 가지고 있다면 어떻게 될까요? –

+0

오른쪽. 에너지 1 - 에너지 2. 단 하나의 가치를 잊어 버려. :피 – 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) 조인 조건에 >>=을 변경하여.