Столбец сравнения SQL изменяет последние X часов - PullRequest
0 голосов
/ 06 января 2019

У меня есть таблица, содержащая записи журнала, которая выглядит следующим образом:

id | name     | level |  timestamp
5  | ironman  | 35    |  2019-01-06 11:37:40
6  | ironman  | 35    |  2019-01-06 11:38:40
7  | ironman  | 36    |  2019-01-06 11:39:40
8  | superman | 25    |  2019-01-06 11:39:49

Мне нужна помощь в создании запроса, который возвращает список уровней, полученных за последние X часов для каждого символа, предпочтительно отсортированный по полученной сумме. Таким образом, в этом примере мой желаемый результат - это

id  |  name    |  gained  |  timestamp
7   | ironman  |  1       |  2019-01-06 11:37:40
8   | superman |  0       |  2019-01-06 11:37:40

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Вам необходимо объединить основную таблицу с запросом, который рассчитывает изменение уровней:

select levels.id, t.name, t.gained, t.timestamp
from (
select 
    name,
    max(level) - min(level) gained,
    max(timestamp) timestamp
from levels
where timestamp > now() - interval 10 hour
group by name
) t inner join levels
on 
  t.timestamp = levels.timestamp
  and
  t.name = levels.name
where levels.timestamp > now() - interval 10 hour
order by t.gained desc, t.name

Я полагаю, что отметка времени в ожидаемом выводе, который вы опубликовали около superman, неверна и должна быть 2019-01-06 11:39:49.
Смотрите демо

0 голосов
/ 06 января 2019

Попробуйте составной запрос, который сравнивает уровень MIN и MAX каждого символа:

SELECT 
    name,
    MAX(level) - MIN(level) as gained,
    MIN(timestamp)
FROM mytable
WHERE timestamp > NOW() - INTERVAL 1 HOUR
GROUP BY 
    name
ORDER BY 
    gained desc

Примечание: предполагается, что level персонажа может только увеличиваться. Если уровень персонажа уменьшается, он все равно будет отображаться как усиление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...