2012-04-27 20 views
7

Investigué este problema, pero tengo problemas para encontrar una solución.MySQL: limitar el número de resultados recibidos en función de un valor de columna | Combinando consultas

tengo la siguiente consulta que me da una lista de s "some_id":

SELECT some_id FROM example GROUP BY some_id 

y tengo la siguiente consulta que va a obtener una lista de las 5 entradas más recientes en una fila que tiene " some_id "igual a un número.

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

¿Cómo puedo obtener los mejores los 5 entradas más recientes de la tabla "ejemplo" para cada "some_id", usando sólo una consulta? Si hay menos de 5 entradas para un "some_id", está bien incluirlas, si eso hace que las cosas sean menos complejas.

¡Muchas gracias!

+0

"He hecho en este problema, pero estoy teniendo problemas para encontrar una solución ". De Verdad? Una pregunta casi idéntica ha sido publicada cientos de veces ya solo en StackOverflow. http://stackoverflow.com/questions/tagged/greatest-n-per-group+mysql Estoy seguro de que si buscas lo suficiente puedes encontrar algo allí que puedas usar. –

Respuesta

8

encontrado la respuesta cuando se mira en la primera respuesta en el siguiente mensaje:

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

he modificado para que se adapte a mis necesidades específicas de investigación:

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

Encontré que tenía que agregar la inicialización de las variables: 'SELECT ... FROM example, (SELECT @some_id: = 0, @num: = 0) como init ...' – Mortimer

+0

Esta respuesta no 't work – Green

+0

Debes mencionar que este enfoque no funciona sin la cláusula 'ORDER BY'. – Green

-2

Hola Utilice Group by y having clause para el límite de verificación para cada ID ..

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

Se comprobará para cada some_id y comprobar si number of rows for some_id is <=5 entonces será resultado de visualización.

+0

Definitivamente no funciona – Green

Cuestiones relacionadas