Найти наибольшую разницу между двумя рядами - PullRequest
1 голос
/ 11 января 2012

У меня есть таблица, которая хранит значения каждый час с веб-сайта на основе 100 пользователей. Каждый пользователь присутствует там каждый час, но может иметь большее / меньшее значение.

Я хочу найти наибольшую разницу между строками и вывести их.

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

Я знаю, что мог бы пройтись по всем строкам каждого пользователя и найти самое высокое значение, но это слишком много кода. Я уверен, что есть способ выяснить самую большую разницу между двумя строками, сгруппированными по имени пользователя. Это не должно быть только каждый час. Это было бы похоже на то, как " Алан вчера установил рекорд в 345 048 единиц энергии в 5 утра! ".

1 Ответ

3 голосов
/ 11 января 2012

Получает максимальную разницу в 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), изменив >= на > в состоянии соединения.

...