2012-04-27 3 views
7

Tôi đã nghiên cứu về vấn đề này, nhưng gặp khó khăn trong việc tìm kiếm giải pháp.MySQL: Giới hạn số kết quả nhận được dựa trên giá trị cột | Kết hợp các truy vấn

Tôi có câu hỏi sau đó mang lại cho tôi một danh sách các "some_id" s:

SELECT some_id FROM example GROUP BY some_id 

Và tôi có các truy vấn sau đó sẽ nhận được một danh sách 5 mục gần đây nhất đối với một hàng có " some_id "bằng một số.

SELECT * FROM example 
WHERE some_id = 1 
ORDER BY last_modified DESC 
LIMIT 5 

Làm cách nào để có được 5 mục nhập gần đây nhất từ ​​bảng "example" cho mỗi "some_id", chỉ sử dụng một truy vấn? Nếu có ít hơn 5 mục nhập cho "some_id", bạn có thể đưa chúng vào nếu điều đó làm cho mọi thứ trở nên phức tạp hơn.

Rất cám ơn!

+0

"tôi đã thực hiện nghiên cứu về vấn đề này, nhưng đang gặp khó khăn khi tìm giải pháp. " Có thật không? Một câu hỏi gần như giống hệt nhau đã được đăng hàng trăm lần trên StackOverflow một mình. http://stackoverflow.com/questions/tagged/greatest-n-per-group+mysql Tôi chắc chắn nếu bạn nhìn đủ cứng, bạn có thể tìm thấy một cái gì đó ở đó bạn có thể sử dụng. –

Trả lời

8

Tìm thấy câu trả lời khi nhìn vào câu trả lời đầu tiên trong bài sau đây:

How do I limit the number of rows per field value in SQL?

Tôi đã sửa đổi nó để phù hợp với nhu cầu cụ thể của tôi:

SELECT * FROM 
(
    SELECT *, @num := if(@some_id = some_id, @num := @num + 1, 1) as row_num, 
      @some_id := some_id as some_id 
    FROM example 
    ORDER BY last_modified DESC 
) as e 
WHERE row_num <= 5 
+0

Tôi thấy tôi phải thêm khởi tạo các biến: 'SELECT ... FROM ví dụ, (SELECT @some_id: = 0, @num: = 0) làm init ...' – Mortimer

+0

Câu trả lời này không 't work – Green

+0

Bạn phải đề cập rằng phương pháp này không hoạt động nếu không có mệnh đề 'ORDER BY'. – Green

-2

Hi Vui lòng sử dụng Group byhaving clause cho giới hạn kiểm tra cho mỗi id ..

SELECT * FROM `example` 
GROUP BY some_id 
HAVING count(*) <= 5 
ORDER BY last_modified DESC 

Nó sẽ kiểm tra cho mỗi some_id và kiểm tra xem number of rows for some_id is <=5 sau đó nó sẽ được kết quả hiển thị.

+0

Chắc chắn không hoạt động – Green