2009-07-19 21 views
6

Tôi có bảng có cấu trúc sau:Làm cách nào để sử dụng MAX và LIMIT cùng nhau trong MySQL

ID | Màu

1 | màu đỏ
2 | màu xanh da trời
3 | màu vàng
8 | màu tím
10 | màu xanh lá cây
.
.
.
100 | yellow

Tôi muốn có thể lấy giá trị MAX ID cho 5 hàng đầu tiên.

Ví dụ, tôi muốn làm một cái gì đó giống như vậy: Chọn MAX (ID) Từ Bảng LIMIT 5

Hy vọng điều này sẽ trả về giá trị 10

Nhưng, MySQL tiếp tục quay trở lại 100 ... giống như MySQL của nó thậm chí không thấy mệnh đề LIMIT.

Trả lời

19

Có vẻ như bạn muốn chọn 5 bản ghi hàng đầu (được sắp xếp theo ID) và sau đó nhận giá trị cao nhất của nhóm đó? Nếu vậy:

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

có thể bạn không cần phải "chọn *"; chỉ "chọn id" là đủ? (Tôi không chắc chắn nó, nhưng có lẽ chỉ chọn các lĩnh vực bạn cần có thể làm giảm bộ nhớ amout yêu cầu - mà luôn luôn là tốt đẹp) –

+0

Hoạt động hoàn hảo !! Cảm ơn rất nhiều. –

+0

Có, điều này phải là 'SELECT ID' – gahooa

1

Sử dụng một subselect:

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

Điều đó có thể không hoàn toàn được SQL hợp lệ, nhưng điều đó sẽ cho bạn một ý tưởng chung.

+4

SQL không hợp lệ. Bạn cần một bí danh trên mỗi bảng dẫn xuất + bạn nên có một đơn đặt hàng để bạn có được kết quả "được xác định". – gahooa

9

Có cách nào tốt hơn để làm điều này hơn subselect:

SELECT id FROM table LIMIT 4,1 

Nhận một hàng nhưng bỏ qua 4 đầu tiên .. Add 'trật tự bởi id' nếu đây là bảng MyISAM.

+2

Điều này phù hợp với tôi. Tôi nghĩ câu trả lời này bị đánh giá thấp. –

+1

Tính năng này hoạt động nếu bạn biết có bao nhiêu hàng. Nếu bạn vượt quá số hàng, truy vấn trả về NULL. Tôi cần điều này cho mục đích hàng loạt, nhưng phiên bản tối đa là phù hợp hơn trong trường hợp của tôi. – talereader

0

Nếu bạn có một bảng với cấu trúc sau

ID | Color 

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

Giá trị MAX ID cho 5 (AUTO_INCREMENT?) Đầu tiên giá trị là 5. Btw, giá trị MAX ID cho 6 giá trị đầu tiên là 6 Và 100 cho tất cả các giá trị. Trân trọng.

Các vấn đề liên quan