2012-04-10 3 views
1

У меня есть login_log стол: enter image description hereGroup By Дата Кластеры

И я пытаюсь построить запрос сгруппированных "уникальные" логины baseed на login_email, login_success, login_email, account_type_id, login_lock, login_ip

Так до сих пор у меня есть

SELECT count(*) count, MAX(login_date) date, login_ip, login_email, account_type_id, login_lock, login_success 
FROM `login_log` 
GROUP BY login_email, login_success, login_email, account_type_id, login_lock, login_ip 
ORDER BY date DESC 

Который получает меня: enter image description here

Но возьмите ряд 5 и 6, например. В 6 пользователь пропустил логин 3 раза перед успешным в строке 5. Количество строк 5 должно читать 1, но оно группирует успешные логины до неудачных попыток.

Что я хочу - это одна строка с успешным логином, строка с неудачным входом в систему, а затем строка с успешным логином, упорядоченная по дате.

Как сгруппировать запрос по дате, чтобы они не «прыгали» друг с другом?

ответ

1

Проблема с вашим запросом заключается в том, что вы не группируете по дате в разделе «По группам». В результате ваш Count (*) увеличивается без необходимости.

Добавление:

Group By Date 

будет работать, но не может дать вам правильный интервал. Добавление даты MySQL() функция позволит вам разделить его на день, так что вы бы добавить:

Group By Date(Date) 

Вы также можете изменить свой псевдоним Дата с не зарезервирован MySQL ключевое слово, как LogDate или что-то подобное ,

Подробнее о функциях MySQL Дата/Время: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

+0

Если группа I по дате я мог бы, а не группа вообще. Идея, скажем, 3 неудачных попытки входа в систему, которые один за другим будет сгруппированы, но если между ними произойдет успешный, он вернет 3 строки, счет 2 => сбой, счет 1 => успех, счет 1 => сбой –

+0

Я понимаю что ты имеешь ввиду. Похоже, вам нужен интервал, который изменяется с помощью login_success. Не знаете, как это сделать в чистом MySQL. Это может быть хорошим началом: [link] (http://www.artfulsoftware.com/infotree/queries.php?&bw=1280#798) - он рассказывает вам, как идентифицировать строки, которые отличаются от _ сразу же предыдущих строк_, поскольку вы описанный выше – citizenen

+0

с использованием Date(), является быстрым, достаточно близким исправлением. –