Я пытаюсь запросить базу данных RADIUS, содержащуюся в MySQL, чтобы определить, какие пользователи не вошли в систему более недели.
Каждая запись имеет имя пользователя, последний раз, когда они регистрировались в RADIUS (время начала) и последний раз, когда они не регистрировались (время останова).
starttime и stoptime - это форматы времени и даты, такие как '2018-01-16 12:01:00'.
Я знаю, что у меня есть 1 пользователь, который был "вниз" с мая прошлого года, поэтому я использую его для тестирования.
Мой первый тест:
select
username,
TIMESTAMPDIFF( hour, max(stoptime), NOW() ) as diff
from
radacct
where
username='waljo'
дает правильный результат waljo, 6824
Теперь, если я попробую тот же запрос, добавив diff> 168 (количество часов в неделю)
select
username,
TIMESTAMPDIFF( hour, max(stoptime), NOW() ) as diff
from
radacct
having diff > 168
and
username='waljo'
Я получаю нулевые результаты. ЗАЧЕМ?
В конечном счете, я хочу сделать что-то вроде этого, показывая всем, кто отключился и не начал больше 1 недели.
select
username,
TIMESTAMPDIFF( hour, max(stoptime), NOW() ) as diff
from
radacct
having max(stoptime) > max(starttime)
and
diff > 168
Это тоже возвращает нулевые результаты.
Да спасибо.
Это, похоже, дает результаты, которые я хотел:
select
username,
TIMESTAMPDIFF( day, max(stoptime), NOW() ) as diff,
max(stoptime) as maxstop,
max(starttime) as maxstart
from
radacct
group by username
having diff > 7
and
maxstop > maxstart
order by diff desc
select username from radacct group by username having max(stoptime) < now() - interval 7 day
HAVING
предназначен для фильтрации групп после агрегации, вы не создали ни одной