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:
Efter några kommentarer har jag bestämt mig för att lägga till ytterligare information.
Företaget jag jobbar på använder också Postgres och speciellt SQL Server. Dessa databaser tillåter inte sådana frågor. Så jag vet att det finns ett annat sätt att göra detta (jag skriver en lösning nedan). Du bör också behöva veta vad du gör om du inte grupperar efter alla kolumner som behandlas i projektionen eller använder aggregerade funktioner. Annars låt det vara!
Jag valde lösningen ovan, eftersom det är en specifik fråga. Tom vill få det senaste inlägget för varje författare på en wordpress-sajt. I mina ögon är det försumbart för analysen om en författare gör mer än ett inlägg per sekund. Wordpress borde till och med förbjuda det genom dess upptäckt av spam-dubbelinlägg. Jag vet av personlig erfarenhet att det finns en riktigt betydande fördel med att prestera att göra en så smutsig grupp med MySQL. Men om du vet vad du gör, då kan du göra det! Jag har så smutsiga grupper i appar som jag är professionellt ansvarig för. Här har jag tabeller med några mio-rader som behöver 5-15 sekunder istället för 100++ sekunder.
Kan vara användbart om några för- och nackdelar: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
Men om det är mer än ett inlägg per sekund för en författare får du mer än en rad och inte den enda sista .
Nu kan du snurra på hjulet igen och få inlägget med det högsta Id
. Även här är det åtminstone inte garanterat att du verkligen får den sista.