2016-03-31 7 views
-2

У меня есть таблица в MySQL, который выглядит, как это -SQL - Получить счет за каждый час

user_id |  login_date  | ip_address 
    45  2016-03-28 21:18:01 111.111.111.111 
    43  2016-03-28 22:18:01 122.122.122.122 

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

date  |  hour  | count 
2016-03-28   19-20   0 
2016-03-28   21-22   2 

Например, на 31 марта 2016 года с час 09 до 10 5 человек вошли в то время как 31-го марта 2016 года от часа 10 до 11 0 человек вошли в

Используя этот ответ -.

SELECT 
    DATE(login_date), 
    HOUR(login_date), 
    COUNT(*) 
FROM logins 
WHERE DATE(login_date) IS NOT NULL 
GROUP BY CONCAT(DATE(login_date),HOUR(login_date)) 
ORDER BY HOUR(login_date) ASC 

дает мне -

enter image description here

Почему я получаю NULL?

я затем использовать эти данные, чтобы создать комбинированную диаграмму, чтобы сравнить сегодняшние логины против вчерашнего

Заранее спасибо за помощь

+0

Вы подсчет логины по user_id или ip_address или оба? – Matt

+1

В чем вопрос? – jotik

+2

Это не часовая работа - если бы это было так, '21' было бы' 1', а '22' было бы' 1' - вместо этого вы рассчитываете от «21: 00: 00' до« 22 » : 59: 59' (что составляет 1 час 59 минут 59 секунд). Если вы хотите группировать по часам, вы можете использовать «GROUP BY DATE (login_date), HOUR (login_date)». – h2ooooooo

ответ

0

я думаю, что вы попробуете это:

SELECT 
    DATE(login_date), 
    HOUR(login_date), 
    COUNT(*) 
FROM your_table 
WHERE DATE(login_date) IS NOT NULL 
GROUP BY CONCAT(DATE(login_date),HOUR(login_date)) 
+0

Спасибо, но я получаю такой результат: 0000-00-00 NULL 561 – Kieron606

+0

@ Kieron606 добавить инструкцию where, убедитесь, что ваш логин_датель является допустимой строкой даты – silly

+0

My login_date это дата и время – Kieron606

Смежные вопросы