MySQL находит даты более 1 недели с сегодняшнего дня

0

Я пытаюсь запросить базу данных 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

Это тоже возвращает нулевые результаты.

  • 0
    Что-то вроде select username from radacct group by username having max(stoptime) < now() - interval 7 day
  • 3
    HAVING предназначен для фильтрации групп после агрегации, вы не создали ни одной
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Да спасибо.

Это, похоже, дает результаты, которые я хотел:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню