Как я могу использовать MAX и LIMIT вместе в MySQL

У меня есть таблица со следующей структурой:

ID | Цвет

1 | красный
2 | синий
3 | желтый
8 | фиолетовый
10| зеленый
.
.
.
100|желтый

Я хотел бы получить значение MAX ID для первых 5 строк.

Например, я хотел бы сделать что-то вроде этого: Select MAX(ID) From Table LIMIT 5

Надеясь, что это вернет значение 10

Но MySQL продолжает возвращать 100... это похоже на то, что MySQL даже не видит предложение LIMIT.


person Community    schedule 19.07.2009    source источник


Ответы (4)


Похоже, вы хотите выбрать 5 лучших записей (упорядоченных по идентификатору), а затем получить наибольшее значение этой группы? Если так:

SELECT
    MAX(ID)
FROM
    ( 
         SELECT ID 
         FROM YourTable
         ORDER BY ID
         LIMIT 5
    ) as T1 
person gahooa    schedule 19.07.2009
comment
вам, вероятно, не нужно выбирать * ; должно быть достаточно только select id? (Я не уверен, что это так, но, возможно, выбор только тех полей, которые вам нужны, может уменьшить требуемый объем памяти - что всегда приятно) - person Pascal MARTIN; 20.07.2009
comment
Да, это должно быть SELECT ID - person gahooa; 22.07.2009
comment
Но это внутренне создает новую таблицу, когда нам просто нужно макс. Мне хочется сказать, что это так же медленно, как выбор отсортированных строк с помощью LIMIT и вычисление максимального значения вне SQL. - person Jus12; 09.12.2016

Есть лучший способ сделать это, чем подзапрос:

SELECT id FROM table LIMIT 4,1

Получите одну строку, но сначала пропустите 4. Добавьте «порядок по идентификатору», если это таблица MyISAM.

person kersjous    schedule 02.06.2011
comment
Это работает, если вы знаете, сколько строк. Если вы превысите количество строк, запрос вернет NULL. Мне это нужно было для пакетных целей, но max версия больше подходит в моем случае. - person binar; 07.02.2014
comment
Хороший! но не будет работать, если вместо 5 записей будет 4 - person Albert Tobac; 22.05.2018

Используйте подзапрос:

SELECT MAX(id) FROM (SELECT id FROM table LIMIT 5);

Возможно, это не совсем допустимый SQL, но это должно дать вам общее представление.

person lucasmo    schedule 19.07.2009
comment
Недействительный SQL. Вам нужен псевдоним для каждой производной таблицы + у вас должен быть порядок, чтобы вы получали определенные результаты. - person gahooa; 19.07.2009

Если у вас есть таблица со следующей структурой

ID | Color

1 | red
2 | blue
3 | yellow
8 | purple
10| green
.
.
.
100|yellow

Значение MAX ID для первых 5 значений (AUTO_INCREMENT?) равно 5. Кстати, значение MAX ID для первых 6 значений равно 6. И 100 для всех значений. С наилучшими пожеланиями.

person volgot    schedule 26.10.2017