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:
Após alguns comentários, decidi adicionar algumas informações adicionais.
A empresa em que estou trabalhando também usa Postgres e principalmente SQL Server. Esses bancos de dados não permitem tais consultas. Então eu sei que existe uma outra maneira de fazer isso (escrevo uma solução abaixo). Você também deve saber o que faz se não agrupar por todas as colunas tratadas na projeção ou usar funções agregadas. Caso contrário, deixe estar!
Eu escolhi a solução acima, porque é uma questão específica. Tom deseja obter a postagem recente de cada autor em um site wordpress. Na minha opinião, é insignificante para a análise se um autor fizer mais de um post por segundo. O Wordpress deve até proibi-lo por sua detecção de spam de postagem dupla. Eu sei por experiência pessoal que há um benefício realmente significativo no desempenho fazendo um grupo tão sujo com o MySQL. Mas se você sabe o que faz, então você pode fazê-lo! Eu tenho esses grupos sujos em aplicativos pelos quais sou profissionalmente responsável. Aqui eu tenho tabelas com algumas linhas mio que precisam de 5-15s em vez de 100++ segundos.
Pode ser útil sobre alguns prós e 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
Mas se houver mais de uma postagem por segundo para um autor, você obterá mais de uma linha e não a única última .
Agora você pode girar a roleta novamente e obter a postagem com o maior
Id
. Mesmo aqui, pelo menos, não é garantido que você realmente obtenha o último.