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 información adicional.
La empresa en la que trabajo también usa Postgres y especialmente SQL Server. Estas bases de datos no permiten este tipo de consultas. Entonces sé que hay otra forma de hacer esto (escribo una solución a continuación). También debe saber qué hace 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 debería incluso prohibirlo por su detección de correo no deseado doble. Sé por experiencia personal que hay un beneficio realmente significativo en el rendimiento haciendo un grupo tan sucio con MySQL. Pero si sabes lo que haces, ¡entonces puedes hacerlo! Tengo grupos tan sucios en aplicaciones de los que soy responsable profesionalmente. Aquí tengo tablas con algunas filas mio que necesitan de 5 a 15 segundos en lugar de 100++ segundos.
Puede ser útil sobre algunos 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í hay más de una publicación por segundo para un autor, obtendrá más de una fila y no la única última .
Ahora puede girar la rueda nuevamente y obtener la publicación con el Id
más alto . Incluso aquí, al menos, no está garantizado que realmente obtengas el último.