select wp_posts.* from wp_posts
where wp_posts.post_status='publish'and wp_posts.post_type='post'
group by wp_posts.post_author
having wp_posts.post_date = MAX(wp_posts.post_date) /* ONLY THE LAST POST FOR EACH AUTHOR */
order by wp_posts.post_date desc
EDITAR:
Después de algunos comentarios, he decidido agregar más información.
La empresa en la que estoy trabajando también utiliza Postgres y especialmente SQL Server. Estas bases de datos no permiten tales consultas. Entonces sé que hay otra forma de hacerlo (escribo una solución a continuación). También debe saber qué hacer si no agrupa por todas las columnas tratadas en la proyección o usa funciones agregadas. De lo contrario, déjalo estar!
Elegí la solución anterior, porque es una pregunta específica. Tom quiere obtener la publicación reciente de cada autor en un sitio de wordpress. En mi opinión, es insignificante para el análisis si un autor hace más de una publicación por segundo. Wordpress incluso debería prohibirlo mediante su detección de doble correo no deseado. Sé por experiencia personal que hay un beneficio realmente significativo en el desempeño haciendo un grupo tan sucio con MySQL. Pero si sabes lo que haces, ¡entonces puedes hacerlo! Tengo grupos tan sucios en aplicaciones de las que soy profesionalmente responsable. Aquí tengo tablas con algunas filas de mio que necesitan 5-15 en lugar de 100 ++ segundos.
Puede ser útil sobre algunos de los pros y contras: http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/debunking-group-by-myths.html
SELECT
wp_posts.*
FROM
wp_posts
JOIN
(
SELECT
g.post_author
MAX(g.post_date) AS post_date
FROM wp_posts as g
WHERE
g.post_status='publish'
AND g.post_type='post'
GROUP BY g.post_author
) as t
ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date
ORDER BY wp_posts.post_date
Pero si aquí es más que un puesto por segundo para un autor que obtendrá más de una fila y no es la única últimos uno.
Ahora puede hacer girar la rueda nuevamente y obtener la publicación con la Id
más alta. Incluso aquí, al menos, no está garantizado que realmente consigas el último.
La forma más rápida de hacerlo es con una consulta interna [ 'code'] (SELECT wp_posts . * FROM (SELECCIONAR * FROM wp_posts ORDER BY wp_post.post_date DESC) como wp_posts WHERE wp_posts.post_status = 'publicar' Y wp_posts.pos t_type = 'post' GROUP BY wp_posts.post_author;) Tal vez no es muy eficiente, pero funciona. – Milos
No creo que la respuesta aceptada para esta pregunta sea correcta y he continuado la pregunta aquí http://stackoverflow.com/questions/14770671/mysql-order-by-before-group-by –
@RobForrest Hey, Me complace actualizar la respuesta seleccionada :) Hace unos años, pregunté esto, así que si hay una manera mejor de alegrarme de señalar a la gente – Tom