2009-07-19 2 views
6

У меня есть таблица со следующей структурой:Как использовать MAX и LIMIT вместе в MySQL

ID | Цвет

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

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

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

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

Но, MySQL продолжает возвращаться 100 ... его, как MySQL, даже не видит предложение LIMIT.

ответ

19

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

SELECT 
    MAX(ID) 
FROM 
    ( 
     SELECT ID 
     FROM YourTable 
     ORDER BY ID 
     LIMIT 5 
    ) as T1 
+1

вам, вероятно, не нужно «выбирать *»; достаточно «select id» должно быть достаточно? (Я не уверен, что это так, но, возможно, выбирая только поле, которое вам нужно, может уменьшить требуемую память amout - что всегда приятно) –

+0

Работает отлично! Большое спасибо. – 2009-07-19 20:47:26

+0

Да, это должен быть 'SELECT ID' – gahooa

1

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

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

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

+4

Недействительный SQL. Вам нужен псевдоним на каждой производной таблице +, вы должны иметь порядок, чтобы получить «определенные» результаты. – gahooa

9

Существует лучший способ сделать это, чем подвыборки:

SELECT id FROM table LIMIT 4,1 

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

+2

Это работает для меня. Я думаю, что этот ответ недооценен. –

+1

Это работает, если вы знаете, сколько строк есть. Если вы превысите количество строк, запрос возвращает NULL. Мне это нужно для пакетных целей, но максимальная версия больше подходит для моего случая. – talereader

0

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

ID | Color 

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

Значение MAX идентификатор для первого 5 (AUTO_INCREMENT?) Значений 5. Btv, значение МАХ идентификатор для первых 6 значений 6 И 100 для всех значений. С уважением.