MySQL: как получить последнюю запись? - PullRequest
1 голос
/ 12 июля 2011

Скажем, у меня есть следующие записи:

1, A
1, B
2, A
2, B
2, C
1, C

Я хочу последнюю запись для 1 и 2, которая должна быть 1, C и 2, C.Как я могу запросить это?

Если я сделаю GROUP BY по номеру, я получу 1, A и 2, A.

Ответы [ 4 ]

3 голосов
/ 12 июля 2011

если под «последним» вы подразумеваете максимум по алфавиту, то, возможно, это:

select id, max(val)
from mytable
group by id
1 голос
/ 12 июля 2011

Теперь, когда мы установили, что вы имеете в виду «последний», как «хронологически», тогда я могу дать правильный ответ ...

SQL не имеет понятия хронологии. Так что вам придется записывать порядок вставки самостоятельно. Чаще всего вы добавляете автоинкрементное поле и затем используете его в предложении ORDER BY вместе с предложением LIMIT.

1 голос
/ 12 июля 2011

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

0 голосов
/ 12 июля 2011

Если это не алфавитный, то вам нужно использовать LIMIT и просто сделайте следующее.

select @rownum:=@rownum+1 as naturalorder, * from foo, (SELECT @rownum:=0) nat order by naturalorder desc limit 1;

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

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

select num, code from thetable order by code DESC limit 1

если вы используете group by, вы должны просмотреть всю таблицу. а также трудно получить полную запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...