2012-01-12 3 views
0

Я работаю над проектом, где мне нужно получить минимальную и максимальную дату из базы данных, а также подстроку первой части поля до символа и группировку по этому полю , Таким образом, в основном в базе данных у меня естьMySQL Min и Max Date с группой By и SubString

2012-01-01 Unknown username/password attempted to login. User: admin

2012-01-01 Failed to add user account. MySQL Error: certain my sql error Unknown

2012-01-02 Failed to add user account. MySQL Error: certain my sql error Unknown

2012-01-04 Unknown username/password attempted to login. User: administrator

Ниже запрос, который я использую, который работает без отображения даты

SELECT ala_type, partMsg, 
wholeMsg, ala_level, ala_page, COUNT(wholeMsg) AS msgCount FROM 
(
SELECT ala_type, SUBSTRING_INDEX(ala_message, ':', 1) AS partMsg, ala_message AS wholeMsg, 
ala_level, ala_page FROM alarms a) p 
GROUP BY partMsg 

Этот бит правильно группировать, как ожидалось, но если я пытаюсь добавить min (date_field), тогда отображается только одна запись.

Ниже запрос, который я попытался

SELECT ala_date, min(ala_date), max(ala_date), ala_type, partMsg, wholeMsg, ala_level, ala_page, COUNT(wholeMsg) AS msgCount FROM ( SELECT ala_date, min(ala_date), max(ala_date), ala_type, SUBSTRING_INDEX(ala_message, ':', 1) AS partMsg, ala_message AS wholeMsg, ala_level, ala_page FROM alarms a) p GROUP BY partMsg

Если я не ставлю ala_date во втором заявлении и просто мин (ala_date) он говорит, что он не может найти поле ala_date. Тем не менее, когда я запускаю запрос я только получаю одну запись, и я бы ожидал увидеть следующее

2012-01-01 2012-01-04 Unknown username/password attempted to login.User: 2

2012-01-01 2012-01-02 Failed to add user account. MySQL Error: > certain mysql error 2

2-и в конце ожидаемого результата подсчет, сколько раз произошло сообщение.

То, что я на самом деле получаю:

2012-01-01 2012-01-01 2012-01-01 Failed to add user account... 1

Он теперь только показывает 1 запись и мин и макс только одни и те же, и счетчик равен 1 вместо 2.

Что я мог сделать, чтобы получить то, что я ожидаю получить.

Спасибо за любую помощь, которую вы можете предоставить.

ответ

0

Вы бы сделали что-то вроде (мой mysql ржавый), но the theyy is sound.

Select SomeDate,SomeMessage From SomeTable 
inner join (
Select Min(SomeDate) as SomeDate From SomeTable) earliest 
On earliestDate.SomeDate = SomeTable.SomeDate 

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