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
EDIT:
Après certains commentaires que j'ai décidé d'ajouter quelques informations supplémentaires.
La société que je suis en train de travailler à aussi utilise Postgres et surtout SQL Server. Cette base de données ne permettent pas de telles requêtes. Donc, je sais qu'il y a une autre façon de faire (j'écris une solution ci-dessous). Vous devriez aussi savoir ce que vous faites si vous n'avez pas de groupe par toutes les colonnes traitées de la projection ou de l'utilisation des fonctions d'agrégation. Sinon, le laisser être!
J'ai choisi la solution ci-dessus, parce que c'est une question spécifique. Tom voulez obtenir le récent post pour chaque auteur, dans un site wordpress. Dans mon esprit, c'est négligeable pour l'analyse si un auteur ne plus d'un post par seconde. Wordpress devrait même interdire par son spam-le double-post de détection. Par expérience, je sais qu'il y a vraiment un avantage significatif dans les performances de faire un de ces sales group by avec MySQL. Mais si vous savez ce que vous faites, alors vous pouvez le faire! J'ai cette sale groupes dans les applications où je suis professionnellement responsable de. Ici, j'ai des tables avec certains mio lignes qui a besoin de 5-15s au lieu de 100++ secondes.
Peut être utile sur certains des avantages et des inconvénients: 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
Mais si ici plus d'un post par seconde pour un auteur, vous obtiendrez plus d'une ligne et pas seulement la dernière.
Maintenant, vous pouvez tourner la roue à nouveau obtenir le poste avec le plus haut Id
. Même ici, au moins, c'est pas garanti que vous obtenez vraiment le dernier.