2009-07-19 13 views
6

Mam tabelę o następującej strukturze:Jak używać MAX i LIMIT razem w MySQL

ID | Kolor

1 | czerwony
2 | niebieski
3 | żółty
8 | fioletowy
10 | zielony
.
.
.
100 | żółty

Chciałbym móc pobrać wartość MAX ID dla pierwszych 5 wierszy.

Na przykład, chciałbym coś zrobić tak: Wybierz MAX (ID) Z tabeli limit 5

nadzieję, że to zwróci wartość 10

Ale MySQL ciągle powracający 100 ... podobnie jak MySQL nie widzi nawet klauzuli LIMIT.

Odpowiedz

19

Wygląda na to, że chcesz wybrać 5 najlepszych rekordów (uporządkowanych według ID), a następnie uzyskać najwyższą wartość tej grupy? Jeśli tak, to:

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

prawdopodobnie nie musisz "wybierać *"; wystarczy tylko "wybierz identyfikator"? (Nie jestem pewien, czy tak jest, ale może wybranie tylko tych pól, które są potrzebne, może zmniejszyć wymaganą ilość pamięci - co jest zawsze miłe) –

+0

Działa doskonale! Wielkie dzięki. –

+0

Tak, powinno to być "SELECT ID" – gahooa

1

Użyj SUBSELECT:

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

To nie może być dość ważny SQL, ale to powinno dać ogólne pojęcie.

+4

Niepoprawny SQL. Potrzebujesz aliasu na każdej wyprowadzonej tabeli + powinieneś mieć zlecenie, by uzyskać "zdefiniowane" wyniki. – gahooa

9

Nie ma lepszego sposobu, aby to zrobić niż podselekcji:

SELECT id FROM table LIMIT 4,1 

Get jeden wiersz, ale pominąć 4 Pierwszy .. Add 'zamówienie id', jeśli to jest tabela MyISAM.

+2

To działa dla mnie. Myślę, że ta odpowiedź jest niedoceniana. –

+1

Działa to, jeśli wiesz, ile jest wierszy. Jeśli przekroczysz liczbę wierszy, zapytanie zwróci wartość NULL. Potrzebowałem tego do celów wsadowych, ale wersja maksymalna jest bardziej odpowiednia w moim przypadku. – talereader

0

Jeśli masz tabelę o następującej strukturze

ID | Color 

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

Wartość MAX ID dla pierwszego 5 (AUTO_INCREMENT?) Wartości jest 5. Btw, wartość MAX ID dla pierwszych 6 wartości jest 6 I 100 dla wszystkich wartości. Pozdrawiamy.