2012-04-16 12 views
8

Tengo una tabla que contiene publicaciones de blog de muchos autores diferentes. Lo que me gustaría hacer es mostrar la publicación más reciente de cada uno de los 10 autores más recientes.MySQL - Selección de la publicación más reciente de cada uno de los 10 autores más recientes

Las publicaciones de cada autor simplemente se agregan a la tabla en orden, lo que significa que puede haber corridas de publicaciones por parte de un solo autor. Me está costando mucho tiempo hacer una sola consulta para hacer esto.

Esto me da los 10 últimos ID únicos de autor; ¿puede usarse como una selección secundaria para obtener la publicación más reciente de cada autor?

SELECT DISTINCT userid 
FROM posts 
ORDER BY postid DESC 
LIMIT 10 

Respuesta

3
select userid,postid, win from posts where postid in (
SELECT max(postid) as postid 
FROM posts 
GROUP BY userid 
) 
ORDER BY postid desc 
limit 10 

http://sqlfiddle.com/#!2/09e25/1

+0

Esto está cerca: devuelve el postid más reciente para cada ID de usuario, pero el resto de los datos en las filas no lo hace partido. Por ejemplo, esto no funciona: SELECCIONE userid, title, bodytext, MAX (id) id DESDE mensajes GROUP BY userid ORDER BY id DESC LIMIT 10 –

+0

right Si quiere todos los campos, lamentablemente necesita una subconsulta. Edité mi respuesta. –

+0

Excelente, gracias. Eso funciona perfectamente. –

1

Necesita una subconsulta para el último postid de cada autor y el orden de postid DESC. A continuación, unirse a ese resultado a la mesa posts:

SELECT B.* FROM 
(
    SELECT * FROM 
    (
     SELECT userid,MAX(postid) postid 
     FROM posts GROUP BY userid 
    ) AA 
    ORDER BY postid DESC 
    LIMIT 10 
) A INNER JOIN posts B 
USING (user_id,post_id); 

Asegúrate de que tienes este índice

ALTER TABLE posts ADD INDEX user_post_ndx (userid,postid); 
+0

que no es necesario que el índice compuesto de identificación de usuario , postID como postID sería el identificador único de todos modos y solo existiría para el único autor que realiza la publicación. – DRapp

+0

@DRapp Ese índice compuesto es necesario para acelerar la sub consulta AA (exploración de índice completo frente a exploración de tabla completa) – RolandoMySQLDBA

1
SELECT userid 
    , MAX(postid) AS lastpostid 
FROM posts 
GROUP BY userid 
ORDER BY lastpostid DESC 
LIMIT 10 
Cuestiones relacionadas