2014-09-23 6 views
9

Я хочу сгруппировать запись mysql с idorig и выбрать max id, чтобы выбрать последнюю запись.Выберите MAX (ID) mysql

Моя содержание базы данных такова:

ID  | IDORIG  | MESSAGE | STATUS 
100 | 100  | azerty  | 2 
101 | 100  | azerty  | 1 
102 | 100  | azerty  | 1 
103 | 100  | azerty  | 0 
104 | 104  | azerty  | 0 
105 | 104  | azerty  | 0 
106 | 104  | azerty  | 0 
107 | 104  | azerty  | 0 
108 | 104  | azerty  | 0 

Мой запрос SQL является:

SELECT MAX(id),message,idorig,status FROM messages GROUP BY idorig order by id desc 

SQL, возвращает хорошее ID:

Но проблема в том, что если я попытаюсь вернуть статус, я получил не

Как я могу изменить SQL запрос, чтобы получить последнюю идентификатор с группой idorig и даже получить записи 102 не 100

ответ

14

ошибка происходит, потому что MySQL не знает, какой статус из сгруппированных записей должен привести к вам. Он знает, что вы хотите, чтобы max (id) из группы, но по статусу не очевиден. Некоторые SQL-модули будут исключать тигр, но не MySQL. Он возвращает первую запись из группы (статус = 2 в этом случае), я думаю. Вы можете сделать это таким образом

Select id, idorig, message, status where id in (SELECT MAX(id) FROM messages GROUP BY idorig) 

MySQL собирается получить Макс (ID) для каждой группы (который является уникальным), а затем использовать его в родительском запросе выбрать интересные данные из этого частностей записи.

+0

Это результат, который мне нужен – Nathan

-2
SELECT id,message,idorig,status FROM messages where id = (select max(ID) from messages GROUP BY idorig) order by id desc 
+1

У вас есть оператор группы в подзапросе (который может возвращать несколько результатов), а затем вы пытаетесь сравнить его с одной переменной. Во всех случаях он не будет работать нормально. –

4
select ID,idorig,Message,Status from messages order by ID desc limit 1; 

или

Select ID,idorig,Message,Status from messages where ID = (select max(ID) from messages); 
+1

Первая из них - лучшая логика среди всех. –

+0

Я совершенно не уверен, что это тот эффект, который хочет автор. Подождем его размышлений об этом. –

+0

Да, я забыл сказать, что запрос может возвращать несколько результатов, я в основном хочу отобразить список сообщений, сгруппированных по идентификатору, выбрав последний идентификатор каждой группы (я отредактировал исходное сообщение) – Nathan

-3
Select id, idorig, message, status where id in (SELECT MAX(id) FROM messages GROUP BY idorig) 
+1

Это обязательно даст сообщение об ошибке msg из-за того, что из условия не найдено. –

+0

И из-за множества пробелов до и после запроса^_ ^ –